繁体   English   中英

使用泛型在Java中进行可选参数化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM