2016-06-21 62 views
2

最簡潔的方式輸入參數的值,讓我們想象一下一個驗證方法調用是這樣的:驗證在Java中

validate(foo, "foo"); 

,其中第二個參數是爲了組成一個有意義的異常所提供的變量名稱foonull時的消息。

是否有可能在Java中檢索運行時提供的值的名稱以避免傳遞參數的名稱並使方法調用如下例所示?

validate(foo); 
+0

都能跟得上;在任何情況下,參數名稱不一定會使編譯過程生效 –

+0

在您的問題中提到的解決方案實際上在某種程度上由'Google'開發的庫使用,特別是對於'NullPointerException' –

回答

0

更新

我從你正在尋找的argument傳遞給method,而不是通過該方法獲得的parameter名稱的名稱的問題假設。

由於object通過的可能是null所以在argument的情況下可能沒有信息發送到該方法。

作爲參考變量只是名稱攜帶地址到實際Object。我不認爲JVM關心argument的名字。

而且您會發送Object這樣的methodName(new Object())。在這種情況下,沒有argument名稱但只有Object的地址傳遞給methodName

因此,下面給出的代碼給你一些選擇方式來滿足你的要求。

在你的問題中提到的解決方案實際上是在通過Google開發的庫某些方面的使用,尤其是對於NullPointerException

public class TestDriveException { 

    public static void main(String[] args) { 
     MyItem myItem = null; 
     validate(myItem); 


    } 

    public static void validate(MyItem myItem) { 
     if (myItem == null) { 
      throw new MyArgumentException("myItem is null"); 
     } 
    } 


    private class MyItem { 

     String name; 

     public String getName() { 
      return name; 
     } 

     public void setName(String name) { 
      this.name = name; 
     } 
    } 

    private static class MyArgumentException extends NullPointerException { 

     public MyArgumentException(String s) { 
      super(s); 
     } 
    } 
} 

像這樣的事情可以做,或者我不知道的參數作爲它只是一個名字,其地址爲Object。對於從Object傳遞的任何信息,它必須是non null

您的問題建議其他的事情可以作爲很好,

public static void validate(MyItem myItem, String argumentValue) { 
    if (myItem == null) { 
     throw new MyArgumentException(argumentValue+" is null"); 
    } 
}