[英]Define generic interfaces with same name but a different number of type parameters in Java
[英]Java: Same name but different generic type
我想為我的代碼使用ArrayList,但是它應該包含不同類型的對象。 所以應該是這樣的:
switch (foo) {
case "foo1":
list=new ArrayList<foo1>();
break;
case "foo2":
list = new ArrayList<foo2>();
break;
我知道發布的代碼不起作用,但是有可能使某事變得相似。
在您問這個列表上應該執行多個操作之前,但我不會再為列表使用不同的名稱來編寫所有內容。
public class foo1 {}
public class foo2 {}
import java.util.ArrayList;
public class work{
public static void main(String[] args){
ArrayList<?> list;
switch (args[0]) {
case "foo1":
list=new ArrayList<foo1>();
break;
case "foo2":
list= new ArrayList<foo2>();
break;
default:
System.out.println("Some Error Text");
return;
}
list.add(new foo1());
}
}
由於類型擦除,您要求的內容完全沒有意義 。 類型參數停止在運行時存在,所以你得到的東西new ArrayList<Foo1>
是完全一樣的,你從得到的東西new ArrayList<Foo2>
。
換句話說,類型參數僅是編譯器的信息。 並且使用您正在使用的代碼,編譯器實際上只關心list
的聲明類型,而不關心實例化list
時提供的類型。
當然,如果您聲明了
ArrayList<?> list;
要么
List<?> list;
或者,如果Foo1
和Foo2
具有共同的超類型(不是Object
),則可以縮小它的范圍-說它們都是Foo
子類型,則可以編寫
List<? extends Foo> list;
但是你為什么要打擾?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.