У меня возникли проблемы с объявлением полностью общего типа для вывода метода. Вот ситуация:Объявление двойного использования подстановочных знаков в java
class A<S,T>{
public Callback<B<S,T>,C<S,T>> method();
}
в моем коде у меня есть один из них;
A<String, ?> instance;
Однако, когда я называю
result = instance.method()
единственный способ сделать компилятор счастливым объявить
Callback<?, ?> result = instance.method()
Но я бы очень хотел, чтобы быть более точным с моими генериков и объявить
Callback<B<String, ?>,C<String, ?>> result = instance.method()
однако, так как каждый подстановочное отдельно, компилятор жалуется, что это неправильно, заявив, что он не может конвертировать из
Callback<B<String,capture#3-of ?>,C<String,capture#3-of ?>>
Есть ли способ объявления этой ситуации правильно?
FYI, классы A, B и C - из внешних библиотек. Я попытался объявить свой экземпляр в качестве
A<String, Object>
, но это также результат метода из четвертого класса, который я не имею никакого контроля над:
class D<T>{
public A<T, ?> getObject();
}
D<String> start = new D<String>();
A<String, ?> = start.getObject();
...
Подпись 'D.getObject()' дает мне плохое чувство. Зачем вам * возвращать * объекты, на которые вы не можете получить никаких разумных гарантий типа? То есть, если 'D' не знает, какой тип'? 'Должен быть, как черт должен обработать вызывающий? Неудивительно, что компилятор действительно не пытается вас устраивать. «?» Должен означать «Мне все равно, какой тип это сейчас», а не «я понятия не имею, что это за тип» – millimoose
Я полностью согласен. Я действительно не знаю, почему это так, но это не мой класс; это основной класс javafx. Все еще застрял tho:/ – Jocken