是的,你可以這樣做,它會工作。但是你需要有正確的開發構造函數來處理數據類型。
程序的輸出是:
class java.lang.Integer
class java.lang.String
正如你可以看到FOO變量的數據類型是一樣的酒吧對象的數據類型。
而你在程序中犯了一個錯誤,在Bar類中應該有一個重載的構造函數。
package test;
public class test {
public static void main(String[] args) {
Bar<Foo> integerBar = new Bar(3);
Foo<Integer> fooIntegerObject = (Foo) integerBar.getFoo();
Bar<Foo> stringBar = new Bar("hello");
Foo<String> fooStringObject = (Foo) stringBar.getFoo();
System.out.println(fooIntegerObject.getVariable().getClass());
System.out.println(fooStringObject.getVariable().getClass());
}
}
class Foo<T> {
private T variable;
Foo(T x) {
variable = x;
}
public T getVariable() {
return variable;
}
}
class Bar<T> {
private T foo;
Bar(T x) {
foo = (T) new Foo<T>(x);
}
public T getFoo() {
return foo;
}
}
這很雜亂。第二個例子,你試圖將'Foo'實例賦值給'T'類變量?這是行不通的。請修改您的示例/問題 –
'new Foo();' - 您正在使用不存在的無參數構造函數,並且您正在實例化一個原始類型。目前還不清楚你想要做什麼。 – Eran