Czy jest możliwe określenie domyślnego typu podczas parametryzowania klasy? Przykład:Opcjonalna parametryzacja w języku Java z 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
}
w moim realizacji muszę podać Brak lub wszystkich parametrów. Jest możliwe, aby drugi parametr był nieobowiązkowy, coś takiego:
// 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
}
z mojego punktu widzenia nie jest dobry powód to zrobić. Ponieważ mój "opcjonalny parametr" (T2 rozszerza Par2Class) jest klasą, której używamy jako obiektu wartości i jest rozszerzony w wielu innych klasach. Jeśli nie określiłem T2, po prostu używam domyślnych metod z ValueObject. Jeśli określę, potrzebuję konkretnych metod i nie muszę rzucać. Myślałem o wprowadzeniu kolejnej klasy w porządku dziedziczenia, ale byłem ciekawy opcjonalnej parametryzacji. Dzięki. – davorp
Mogę się mylić, ale myślę, że są takie przypadki użycia. W języku C++, gdzie dozwolone są typy szablonów typu defaut, są one używane np. do dostarczania domyślnej wersji alokatora pamięci dla typów STL. – Rom1
Typowym dobrym zastosowaniem jest parametr pośredni typu SwingWorker, jeśli jest taki sam jak parametr wynikowy. –