答案是不。至少没有办法使用泛型类型做到这一点。我建议结合使用泛型和工厂方法来执行您想要的操作。
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。



