Java 中的可选参数化与泛型

2022-09-04 02:05:54

是否可以在参数化类时指定默认类型?例:

// 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”。或者使用另一个只有一个类型参数的抽象类扩展抽象类(在扩展调用中将 Object 指定为第二个类型参数)。


推荐