在我的通用类中,我需要将类型参数限制为Integer
OR String
。有没有办法实现这个目标?我不能使用T extends SomeClass
来限制类型,因为普通父只是对象...
更新
public abstract class MyClass<T>{
private T value;
public T getValue(){
return value;
}
}
我希望value
类型为String
或Integer
,我需要使用相同的方法来获取它(不是getIntValue()
+ getStringValue()
)
This似乎没有帮助...
答案 0 :(得分:3)
如果我是你,我会重载两种方法:
public void withInteger(Integer param) { .. }
public void withString(String param) { .. }
请注意,我没有理由使用T extends String
之类的内容,因为 String
和Integer
都是final
且无法进行子类化
答案 1 :(得分:0)
让你的班级ctor私有,并通过工厂方法来创建实现;类型限制不限于MyClass
,而是通过工厂。
class MyClass<T> {
private T value;
MyClass(T value) { this.value = value; }
public T getValue() { return value; }
}
class MyClassFactory {
public final static MyClass<Integer> createInteger(Integer i) {
return new MyClass<Integer>(i);
}
}