我工作在Java OCP考試編譯,我碰到這個問題通配符泛型
考慮下面的代碼來:
Transaction t1 = new Transaction<>(1, 2); //1
Transaction t2 = new Transaction<>(1, "2"); //2
它要求// 1必須編譯和//2不能編譯。 Class Transaction的以下哪些聲明將滿足請求?
答案是這樣的一個:
public class Transaction<T, S extends T> {
public Transaction(T t, S s) {
}
}
我理解。但是當我將這段代碼放入一個Eclipse項目時,它可以工作!這裏是我的代碼:
class TransactionD<T, S extends T> {
public TransactionD(T t, S s){
System.out.println("D: t: " + t.getClass() + " s: " + s.getClass());
}
}
public class Test1
{
public static void main(String[] args) {
TransactionD d1 = new TransactionD<>(1, 2); //1
TransactionD d2 = new TransactionD<>(1, "2"); //2
}
}
我的輸出是這樣的:
d:T:類java.lang.Integer S:類java.lang.Integer
d:T:級Java。 lang.Integer s:class java.lang.String
我的問題是:我錯過了什麼?
什麼是您的書或模擬測試的目標Java版本? 「OCP」似乎是Java5/6-ish。 – Mena
嘗試發送'新的Integer(1),「2」'到'TransactionD'構造函數 – CraigR8806
@Mena它是7或8(我實際上是一名教授,與正在使用7或8的學生一起工作,所以我不是確定這個學生在哪個版本) – Shoikana