簡體   English   中英

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

[英]Cannot find Method inside Stream.generate().forEach()

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通過返回getEdgeStream.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類型,並且在Object類中沒有稱為getEdge()方法。 要解決該問題,您可以執行以下操作:

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

另外,請注意, generate(Supplier<T> s) 將返回無限的順序流 ,通常在這種情況下,您將需要使用limit截斷該流。

您必須將g為所需的數據類型。 如您所見,變量g當前是一個Object 只需使用(neededObjectforGetEdge(g)).getEdge()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM