Я пытаюсь реорганизовать класс и набор подклассов, где тип M действительно расширяет что-либо, хотя мы знаем, что он должен быть подклассом определенного типа. Этот тип параметризован, и я хотел бы, чтобы его параметризованные типы были доступны для подклассов, у которых уже есть значения для M.Extract Generic types from extended Generic
Есть ли способ определить этот класс без необходимости включать избыточные типы K и V в список параметров , Я хотел бы иметь возможность компилятора вывести их из того, что M отображается на подклассы.
public abstract class NewParametrized<K, V, M extends SomeParametrized<K, V>> {
public void someMethodThatTakesKAndV(K k1, V v1) { }
}
Другими словами, я хотел бы объявление класса выглядеть примерно так:
public class NewParametrized<M extends SomeParametrized<K, V>> {
И К и типа V была бы быть выведено из определения М.
Я думаю, что он в основном означает повторение при использовании класса, а не только повторение в его объявлении. Каждый раз, когда вы ссылаетесь на экземпляр этого класса, вы должны повторять то же самое. Подобно 'NewParametrized>'. Оба экземпляра String/Integer являются использованиями, а не декларациями. –
Хороший вопрос - я не думал об этом с точки зрения пользователей класса, просто с точки зрения автора. Эта многословность является неудачной, даже если она имеет смысл в контексте объявления класса. –