簡體   English   中英

在Java中,如何使用另一個類型變量作為類型實例化泛型類?

[英]In Java, how can I instantiate a generic class with another type variable as the type?

Java教程中 ,我讀到“一個類型變量[泛型類]”可以是您指定的任何非基本類型:任何類類型,任何接口類型,任何數組類型,甚至是另一個類型變量 。“

換句話說,鑒於此:

class Box<T> {
    private T t;
    public void set(T t) { this.t = t; }
    public T get() { return t; }
}

我可以這樣做,如:

Box<Object> box1 = new Box<>();
Box<Serializable> box2 = new Box<>();
Box<Comparable<Object>> box3 = new Box<>();
Box<char[]> box4 = new Box<>();

但是類型變量怎么樣? “另一個類型變量”在編譯時甚至意味着什么?

// nothing like this works
// Box<Z> box5 = new Box<>();
// Box<<Z>> box5 = new Box<>();
// Box<Z> box5 = new Box<Z>();
// Box<<Z>> box5 = new Box<<Z>>();

我認為它指的是在另一個泛型類中使用它的情況,如下所示:

class SomeGenericClass<T> {
    Box<T> box = new Box<T>();
}

其中T是另一個類型變量,您可以像這樣構造對象:

SomeGenericClass<Object> someGenericClass = new SomeGenericClass<>();

SomeGenericClass box初始化的boxBox<Object>

它也可以指在泛型類中使用另一個泛型實例,如下所示:

class Box<T> {
    ArrayList<T> arrayList = new ArrayList<>();
}

並構建這樣的類:

Box<Object> box = new Box<>();

ArrayListBox<Object>將是一個ArrayList<Object>

這意味着如果你有另一個使用泛型的類,你可以將類型設置為該類的另一個類型變量,如下所示:

public class A<S>{
  private B<S>();

}

public class B<T>{
}

我會做這樣的事情

Box <T> extends SomeParametrizedClass<T>{
// class body
private List<T> someList;
}

在這里,您可以使用變量類型而不是特定類型的參數化字段和超類。

暫無
暫無

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

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