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
。< / p>
尝试访问g.getEdge()
时,我收到如下错误:
error: cannot find symbol
System.out.println(g.getEdge());
symbol: method getEdge()
location: variable g of type Object
如何访问g.getEdge()
?
答案 0 :(得分:2)
由于调用GraphController.GRAPHPOOL.take();
将不同的类型返回到语句return "Interrupted!"
,生成中间方法返回的元素都将为Object
类型并且在getEdge()
类中没有称为Object
的方法。要解决这个问题,你可以做一些事情:
.forEach(g -> {
if(g instanceof TheType){
System.out.println(((TheType)g).getEdge());
}
else{
// "interrupted"
}
});
另请注意,方法generate(Supplier<T> s)
会返回无限顺序流,通常在这种情况下,您需要利用limit来截断流。
答案 1 :(得分:0)
您必须将g
强制转换为所希望的数据类型。如您所知,变量g
目前是Object
。只需使用(neededObjectforGetEdge(g)).getEdge()