誰能請解釋一下我下面的代碼Java泛型方法在水平
public <T extends Emp> void foo(ArrayList<T> list) {
list.add(list.remove(0)); // (cycle front element to the back)
}
我想了解泛型將如何適用於返回類型爲void。 注意:我已經改變了代碼,現在它沒有給出任何錯誤。
誰能請解釋一下我下面的代碼Java泛型方法在水平
public <T extends Emp> void foo(ArrayList<T> list) {
list.add(list.remove(0)); // (cycle front element to the back)
}
我想了解泛型將如何適用於返回類型爲void。 注意:我已經改變了代碼,現在它沒有給出任何錯誤。
我想了解泛型將如何應用於void返回類型。
這只是一種語法。泛型不適用於void
返回類型,它們適用於整個方法。
泛型參數的名稱和限制需要放在程序文本的某處。在類聲明中,它們在尖括號中跟隨類名。在通用方法聲明中,它們遵循可訪問性指示符public
,並且在返回類型void
之前。
人們可以很容易想象泛型類型的替代位置,如
public void foo<T extends Emp>(ArrayList<T> list) // Imaginary syntax
甚至
public void foo(ArrayList<T> list) <T extends Emp> // Imaginary syntax
但Java的設計者決定返回類型代號前的位置。
泛型不適用於void
。
如果您認爲類型爲<T extends Emp>
,您的意思是說,可以應用Emp的任何子類型來代替T
。
在你的代碼,你可以使用<T>
代替<T extends Emp>
因爲你不與Emp
public <T> void foo(ArrayList<T> list) {
list.add(list.remove(0)); // (cycle front element to the back)
}
關於如何它會工作,該類型將由您在使用此方法來提供做任何事情並且在編譯時,java會自動放置所需的強制轉換。所以,如果你使用的是這樣的:
ArrayList<String> list = new ArrayList<>();
// Add some items into list
foo(list);
在這種情況下
,你foo()
方法找出型<T>
是String
等,將表現是這樣的:
public void foo(ArrayList<String> list) {
list.add((String)(list.remove(0)));
}
它並不適用於無效。它用於ArrayList。 –
這段代碼不會編譯。你正在嘗試向'ArrayList'添加一個'String',其中'T'絕對不是一個字符串。 –
yole
他們不適用於無效。 – GurV