Почему после преобразования захвата я получил две новые переменные типа, а общий тип имел только один параметр типа?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему после преобразования захвата я получил две новые переменные типа, а общий тип имел только один параметр типа?

Сообщение Anonymous »

Определен простой класс:

Код: Выделить всё

class SimpleClass {
public T t1;
public T t2;

public SimpleClass(T t1, T t2) {
this.t1 = t1;
this.t2 = t2;
}
}
тестовый код:

Код: Выделить всё

SimpleClass p = new SimpleClass("a", "b");
p.t1 = p.t2;
Скомпилировав этот код, я получил сообщение об ошибке:

Код: Выделить всё

error: incompatible types: CAP#1 cannot be converted to CAP#2
p.t1 = p.t2;
^
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends Object from capture of ?
CAP#2 extends Object from capture of ?
Объявленный тип p — SimpleClass, после преобразования захвата я думал, что получил такой класс:

Код: Выделить всё

class SimpleClass_cap#1 {
public CAP#1 t1;
public CAP#1 t2;

public SimpleClass(CAP#1 t1, CAP#1 t2) {
this.t1 = t1;
this.t2 = t2;
}
}
который основан на jls:

Пусть G назовет объявление универсального типа (§8.1.2, §9.1 .2) с n параметрами типа
A_1,...,A_n с соответствующими границами U_1,...,U_n.
Существует преобразование захвата из параметризованного типа G (§4.5) в
параметризованный тип G, где для 1 ≤ i ≤ n:
• Если T_i является подстановочным типом аргумент (§4.5.1) формы ?, то S_i — это переменная нового типа,
верхняя граница которой равна U_i[A_1:=S_1,...,A_n:=S_n] и нижняя граница которой bound
— это нулевой тип (§4.1).

Мой вопрос: после того, как delcared p как SimpleClass< /code>, почему у меня появились две новые переменные типа CAP#1 и CAP#2?

Подробнее здесь: https://stackoverflow.com/questions/793 ... generic-ty
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»