簡體   English   中英

Optional.map中的Integer :: toString

[英]Integer::toString in Optional.map

在Java中使用帶方法引用的map時,我遇到了以下問題:

public class Dummy {

  public static void main(String[] args) {
    IntegerHolder ih = new IntegerHolder();
    Optional<IntegerHolder> iho = Optional.of(ih);
    iho.map(IntegerHolder::getInteger).map(Objects::toString);
    iho.map(IntegerHolder::getInteger).map((Integer ii) ->ii.toString());
    iho.map(IntegerHolder::getInteger).map(Integer::toString);// this line will not compile. The error is "non-static method toString() cannot be referenced from a static context" 
  }

  private static class IntegerHolder {
    private Integer i;
    Integer getInteger() {return i;}
 }
}

在我看來,Integer :: toString與IntegerHolder :: getInteger相同。 兩者都是“引用特定類型的任意對象的實例方法”我不明白為什么一個工作,但另一個不工作。 你能否對這個問題有所了解? 非常感謝你。

錯誤是非常誤導的,例如在java-11中錯誤會更有意義:

對toString的引用是不明確的

Integer中的toString(int)方法和Integer匹配中的toString()方法)

如果您通過lambda表達式重寫此方法,您將看到兩個簽名都可能匹配:

iho.map(IntegerHolder::getInteger).map((Integer ii) -> Integer.toString(ii));
iho.map(IntegerHolder::getInteger).map((Integer ii) -> ii.toString());

這兩個都可以重寫為方法參考,但在這種情況下,調用哪種方法?

暫無
暫無

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

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