接受两种类型之一的泛型类
我想制作这种形式的通用类:
class MyGenericClass<T extends Number> {}
问题是,我希望T可以是整数或Long,但不能接受Double。因此,仅有的两个可接受的声明将是:
MyGenericClass<Integer> instance;MyGenericClass<Long> instance;
有什么办法吗?
回答:
答案是不。至少没有办法使用泛型类型做到这一点。我建议结合使用泛型和工厂方法来执行您想要的操作。
class MyGenericClass<T extends Number> { public static MyGenericClass<Long> newInstance(Long value) {
return new MyGenericClass<Long>(value);
}
public static MyGenericClass<Integer> newInstance(Integer value) {
return new MyGenericClass<Integer>(value);
}
// hide constructor so you have to use factory methods
private MyGenericClass(T value) {
// implement the constructor
}
// ... implement the class
public void frob(T number) {
// do something with T
}
}
这样可以确保只能创建MyGenericClass<Integer>
和MyGenericClass<Long>
实例。尽管您仍然可以声明类型的变量,MyGenericClass<Double>
但它必须为null。
以上是 接受两种类型之一的泛型类 的全部内容, 来源链接: utcz.com/qa/398979.html