[英]Optional parametrization in Java with 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
}
简单回答:不,java不支持这样的默认参数化。
从来没有一个很好的理由这样做。 通常,您指定泛型类型参数,因为某些方法参数接受或返回该类型的参数。 如果未指定有效,那似乎表明您打算不执行这些方法的任何有意义的实现。
无论如何,要解决您感知到的问题,只需为您不需要指定的任何类型参数指定“对象”。 或者使用另一个只有一个类型参数的抽象类扩展抽象类(在扩展调用中将Object指定为第二个类型参数)。
那么,您的案例的正确解决方案可能是
// parametrized only mandatory imlementation class
public class RealClass<StillGeneric extends Par1Class>
extends AbsClass<ClassThatExtendsPar1, StillGeneric> {
// code
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.