Дополнительная параметризация в Java с помощью Generics

Можно ли указать тип по умолчанию при параметризации класса? Пример:

// abstract class    
public abstract class AbsClass<T1 extends Par1Class, T2 extends Par2Class> {
    // code 
}

// parametrized imlementation class
public class RealClass extends AbsClass<ClassThatExtendsPar1, ClassThatExtendsPar2Class> {
   // code
}

// non-parametrized imlementation class
public class RealClass extends AbsClass {
   // code
}

в моей реализации я должен указать параметры NONE или ALL. Возможно сделать второй параметр необязательным, примерно так:

// abstract class    
public abstract class AbsClass<T1 extends Par1Class, T2 extends Par2Class : default Par2Class > {
    // code 
}

// parametrized only mandatory imlementation class
public class RealClass extends AbsClass<ClassThatExtendsPar1> {
   // code
}

Ответ 1

Простой ответ: нет, java не поддерживает так называемые параметризации по умолчанию.

Ответ 2

Никогда не бывает на то повода для этого. Обычно вы указываете параметры типового типа, потому что некоторые аргументы метода принимают или возвращают параметр этого типа. Если неопределенные были действительны, это, по-видимому, предполагает, что вы не намерены выполнять какую-либо значимую реализацию этих методов.

В любом случае, чтобы решить вашу воспринимаемую проблему, просто укажите "Объект" для любого параметра типа, который вы не хотите указывать. Или расширьте абстрактный класс другим абстрактным классом, который имеет только один параметр типа (указывающий Object как параметр второго типа в вызове extends).

Ответ 3

Ну, правильным решением для вашего дела может быть

// parametrized only mandatory imlementation class
public class RealClass<StillGeneric extends Par1Class>
extends AbsClass<ClassThatExtendsPar1, StillGeneric> {
    // code
}