У меня есть этот класс, только для целей обучения:Java Дженерик (простой случай, ясно загадка для infering)
public class MyClass{ //Looking for a solution without making my class also generic <Type>
//Private Arraylist var to hold the value called myvar
public MyClass(ArrayList<MyDesiredType> incoming) {
//CODE myVar=incoming
}
public MyDesiredType getType() {
return myVar.get(0);
}
}
Есть ли способ, чтобы вывести в поступающем объекте из конструкторы к типу возвращаемого метода без предупреждений и кастингов и потери типов, но больше всего БЕЗ создания всего класса GENERIC (кажется мне лишним)? Если нет, почему я должен думать, что это невозможно для компилятора?
Это переформулированный вопрос, который я уже сделал, но это был мой первый, и я научился раскрывать его, потому что никто не понимал. Я попытался позже отредактировать исходный вопрос, но все было похоронено. Я изменил и упростил пример и постараюсь сделать это легко. Оригинальный вопрос: Java Generics Silly Thing (Why cant I infer the type?).
Если у вас возникли проблемы, просто сообщите об этом мне, и я удалю его.
Рассматривая старый вопрос и ответы, кажется, совершенно ясно, что то, что вы хотите сделать, невозможно. Реальный вопрос: почему вы не хотите генерировать «MyClass»? – Anthales
Ну, я вижу только один ответ, говорящий о невозможности конструкторского вывода, более половины из них говорят только о дженериках в классе, а другое мы все даем противоречивые ответы на вывод. Я не хочу создавать MyClass generic, потому что хочу знать, существует ли какой-то творческий способ передачи типа изнутри, и потому что я считаю его раздражающим и ненужным, если у вас уже есть тип, чтобы указать его для создания экземпляра класса. И если обычный метод может сделать вывод, почему конструктор не сможет это сделать или передать его частной переменной? – Whimusical
На самом деле есть один случай, когда теоретически невозможно было бы вывести тип, и это будет, если 'incoming' будет' null'. Но компилятор не знает, является ли оно «null», поэтому это может быть один фактический аргумент _why_ вам не допускается вывод типа таким образом. – Anthales