[英]Passing Array as argument in form {}
我可以像這樣設置一個數組:
Object[] objects = {new Object()};
但是,如果我有一個方法:
public void setObject(Object[] objects) {
}
我做不到以下事情:
setObject({new Object()});
為什么是這樣? 為什么{new Object()}
不足以作為參數,但足以初始化Object[]
數組?
您可以傳遞一個匿名數組:
setObject(new Object[] { new Object() });
請注意,語法{ new Object() }
在其聲明初始化數組時才起作用。 例如:
Object[] arr = { new Object() };
聲明數組后,這不起作用:
Object[] arr;
//uncomment below line and you'll get a compiler error
//arr = { new Object() };
arr = new Object[] { new Object() };
因為您尚未鍵入數組。 它可以是對象,整數,等等。
以下應該有效:
setObject(new Object[]{new Object()});
適當的回調是:
setObject(new Object[]{new Object()});
每個Java數組都有一個組件類型。 在初始化程序中使用時,編譯器會推斷新數組的類型(右側)與聲明的類型(左側)相同。
缺少聲明時,編譯器不知道數組的組件類型應該是什么。 你必須是顯式的,使用表達式setObject(new Object[] { new Object() })
有人可能想知道為什么編譯器不會從聲明的方法參數類型推斷出類型,就像初始化變量時一樣。 但是,編譯器根據參數類型解析調用方法; 如果您不知道要調用的方法,則無法從其參數類型中推斷出任何內容。 初始化變量時沒有循環性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.