System.out.println(GraphController.GRAPHPOOL.peek().getEdge());
Stream.generate(() -> {
try {
return GraphController.GRAPHPOOL.take();
} catch (InterruptedException ie) {
return "Interrupted!";
}
})
.forEach(g -> {System.out.println(g.getEdge());}
});
我可以打印出
Edge
中getEdge
返回的对象Stream.generate().forEach()
,但是,在forEach
中,我只能访问对象g
。尝试访问
g.getEdge()
时,出现如下错误:error: cannot find symbol
System.out.println(g.getEdge());
symbol: method getEdge()
location: variable g of type Object
如何访问
g.getEdge()
? 最佳答案
由于调用GraphController.GRAPHPOOL.take();
返回与语句return "Interrupted!"
不同的类型,generate中间方法返回的元素都将为Object
类型,并且在getEdge()
类中没有这样的方法称为Object
。要解决该问题,您可以执行以下操作:
.forEach(g -> {
if(g instanceof TheType){
System.out.println(((TheType)g).getEdge());
}
else{
// "interrupted"
}
});
另外,请注意,方法
generate(Supplier<T> s)
返回无限的顺序流,通常在这种情况下,您将要使用limit截断该流。