class A <T> {
private T field;
}
我知道我可以使用<强制类型参数为某种有界类型. ...扩展...> ;,但是如何强制类型参数T只能是String,Integer,SomeClassB,SomeEnumC,而不能用其他参数对其进行参数化?
A<SomeClassB> a = new A<SomeClassB>();
会合法的.
A<SomeClassX> a = new A<SomeClassX>();
将是非法的.
我已经尝试使用以下方法测试这些类型
T instanceof SomeEnumC
在类A的构造函数中,但是非常混乱.
解决方法:
注意:我同意@Jeffrey的上面的评论,这似乎没有多大意义,因为通过执行这种限制似乎无法获得任何有用的类型信息.我真的很想知道您的用例在这里.
您不能将T可接受的泛型类型限制为不相关类的列表,例如您的示例.您只能使用超级或扩展来限制泛型类型,这意味着它们必须是某些给定类型的超级或子类型.
但是,由于您似乎想允许T的类数量有限,因此您应该只能枚举所有这些类.这就是我的想法:
public class A<T> {
/**
* Private constructor means only nested classes
* can extend this class. We use this to limit the
* types that can be used for T.
*/
private A() { }
/** Integer version of A */
public static class IntA extends A<Integer> { }
/** String version of A */
public static class StringA extends A<String> { }
}
现在,您可以使用static import导入A&T的任何嵌套版本.您想要的,或者所有这些都像这样:import static A. *;