1. 程式人生 > 程式設計 >Java方法簽名為何不包含返回值型別

Java方法簽名為何不包含返回值型別

看下官方說明:

Java方法簽名為何不包含返回值型別

意思是java方法簽名包含兩個要素:方法名稱和引數列表。即不包括返回值型別。

那為什麼不能包含返回值型別呢?

看一下如下兩段程式碼示例。

示例一:

public String m123(int i) {
    return "456";
  }

  public int m123(int i) {
    return 123;
  }

  // 為什麼不能包含返回值的原因:編譯器無法從所有的上下文中確定過載版本
  // 因此為了避免“模稜兩可”的局面,java方法簽名中不包含返回值型別
  // 示例展示:
  public void whyNoReturnType() {
    // 假設java方法簽名定義包含方法返回值型別,方法現有 String 和 int 兩種型別返回值

    // 這行程式碼編譯器可以找到返回值為 String 型別的過載方法
    String s = m123(456);

    // 而這行程式碼,編譯器無法確定你需要哪個過載版本,因為返回值被捨棄了,造成了一種模稜兩可的局面
    m123(567);
  }

類似的,示例二:

   public void whyNoReturnType2() {
     System.out.println(m123(456));
   }

第二個示例程式碼相對更簡單,從另外一個角度看,println 方法我們會在監控輸出的時候經常使用到,而需要注意到的是 println 方法有許多過載方法,如下圖:

Java方法簽名為何不包含返回值型別

在示例二中,如果m123() 方法有多個返回值,那麼編譯器就無法為 println() 方法決定到底要呼叫返回值是 String 的方法還是 返回值是 int 的方法。即陷入了一種“模稜兩可”的局面。

總結:

通過兩個示例展示了,java為了避免編譯器無法從所有上下文中找出過載而陷入“模稜兩可”的局面,因此java方法簽名中只有兩個要素:方法名稱和引數列表。不包含返回值型別。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。