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」。