Java 在Stream.generate().forEach()内找不到方法 System.out.println(GraphController.GRAPHPOOL.peek().getEdge()); Stream.generate(()->{ 试一试{ 返回GraphController.GRAPHPOOL.take(); }捕获(中断异常ie){ 返回“中断!”; } }) .forEach(g->{System.out.println(g.getEdge());} });

Java 在Stream.generate().forEach()内找不到方法 System.out.println(GraphController.GRAPHPOOL.peek().getEdge()); Stream.generate(()->{ 试一试{ 返回GraphController.GRAPHPOOL.take(); }捕获(中断异常ie){ 返回“中断!”; } }) .forEach(g->{System.out.println(g.getEdge());} });,java,java-stream,Java,Java Stream,我可以打印getEdge从Stream.generate().forEach()中返回的对象Edge,但是,在forEach中,我只能访问对象g 尝试访问g.getEdge()时,我收到如下错误: 错误:找不到符号 System.out.println(g.getEdge()) symbol:method getEdge() 位置:对象类型的变量g 如何访问g.getEdge()?您必须将g转换为所需的数据类型。如您所知,变量g当前是一个对象。只需使用(needededObjectForgedG

我可以打印
getEdge
Stream.generate().forEach()
中返回的对象
Edge
,但是,在
forEach
中,我只能访问对象
g

尝试访问
g.getEdge()
时,我收到如下错误:

错误:找不到符号

System.out.println(g.getEdge())

symbol:method getEdge()

位置:对象类型的变量g


如何访问
g.getEdge()

您必须将
g
转换为所需的数据类型。如您所知,变量
g
当前是一个
对象
。只需使用
(needededObjectForgedGE(g))强制转换即可。getEdge()

您必须将
g
强制转换为所需的数据类型。如您所知,变量
g
当前是一个
对象
。由于调用了
GraphController.GRAPHPOOL.take(),只需使用
(needededObjectForgedGE(g)).getEdge()对其进行强制转换即可
将不同类型的元素返回到语句
return“Interrupted!”
,生成中间方法返回的元素都将是
Object
类型,在
Object
类中没有名为
getEdge()
的方法。要解决此问题,您可以执行以下操作:

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

另外,请注意,该方法返回一个无限序列流,通常在这种情况下,您希望利用它来截断流。

由于调用
GraphController.GRAPHPOOL.take()
将不同类型的元素返回到语句
return“Interrupted!”
,生成中间方法返回的元素都将是
Object
类型,在
Object
类中没有名为
getEdge()
的方法。要解决此问题,您可以执行以下操作:

.forEach(g -> {
       if(g instanceof TheType){
           System.out.println(((TheType)g).getEdge());
       }
       else{
           // "interrupted"
       }
   });
另外,请注意,该方法返回一个无限序列流,通常在这种情况下,您希望利用它来截断流