接受两种类型之一的泛型类

我想制作这种形式的通用类:

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

回到顶部