簡體   English   中英

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;

或者,如果Foo1Foo2具有共同的超類型(不是Object ),則可以縮小它的范圍-說它們都是Foo子類型,則可以編寫

List<? extends Foo> list;

但是你為什么要打擾?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM