gpt4 book ai didi

java - 在 Stream.generate().forEach() 中找不到方法

转载 作者:行者123 更新时间:2023-12-02 02:26:17 25 4
gpt4 key购买 nike

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());}
});

我能够从 Stream.generate().forEach() 中打印 getEdge 返回的对象 Edge,但是,在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内类(class)。要解决这个问题,您可以执行以下操作:

.forEach(g -> {
if(g instanceof TheType){
System.out.println(((TheType)g).getEdge());
}
else{
// "interrupted"
}
});

另外,请注意方法 generate(Supplier<T> s) 返回一个无限顺序流,通常在这种情况下您需要使用 limit截断流。

关于java - 在 Stream.generate().forEach() 中找不到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729061/

25 4 0