我正在进行Java OCP考试,我遇到了这个问题
给出以下代码:
Transaction t1 = new Transaction<>(1, 2); //1
Transaction t2 = new Transaction<>(1, "2"); //2
要求// 1必须编译,// 2必须不编译。类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:class java.lang.Integer s:class java.lang.Integer
D:t:class java.lang.Integer s:class java.lang.String
我的问题是:我错过了什么?
答案 0 :(得分:5)
由于您在声明中使用原始类型,因此实际上使用的是__setattr__
,这使得调用有效,因为根据java泛型,TransactionD<Object, Object>
扩展Object
,两者都是Object
和Integer
也扩展了对象。