Я работаю на экзамене 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: т: класс java.lang.Integer s: класс java.lang.Integer
D: т: класс Java. lang.Integer s: class java.lang.String
Мой вопрос: что мне не хватает?
Что такое Java-версия, на которую нацелена ваша книга или макет теста? «OCP» кажется Java5/6-ish. – Mena
попробуйте отправить 'new Integer (1)," 2 "' на ваш конструктор 'TransactionD' – CraigR8806
@Mena это 7 или 8 (я на самом деле профессор, работающий со студентами, которые используют 7 или 8, поэтому я не уверенный, в какой версии находится этот ученик) – Shoikana