Given:
public class Test<T> {
private T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
public static void main(String args[]) {
Test<String> type = new Test<>();
Test type1 = new Test(); //line n1
type.set("Java");
type1.set(100); //line n2
System.out.print(type.get() + " " + type1.get());
}
}
What is the result?
A.
Java 100
B.
java.lang.string@java.lang.Integer@
C. A compilation error occurs. To rectify it, replace line n1 with:
Test<Integer> type1 = new Test<>();
D. A compilation error occurs. To rectify it, replace line n2 with:
type1.set(Integer(100));
題解
type變數有使用到泛型,指定的型態為String,所以T為String。type1變數則沒有指定泛型,所以T可當作是Object。
type1物件的get方法,可以傳入型態為Object的參數,因此所有型態的資料都可以傳入,當然也包括整數物件(Integer)了。
「+」運算子若其中一個的運算元為字串(物件)時,作為字串連接的功用。物件會使用其「toString」方法來取得字串。所以這題會輸出「Java 100」。