嘿,我想做的事情与Java泛型有关,是否可以在参数中指定类的泛型类型?我不能很好地描述它,这就是为什么我要举一个例子,尝试以下类的原因:
public class List<T>
是否可以指定我的T
,因为我希望它是整数或布尔值?
答案 0 :(得分:3)
您不能直接按照ernest_k的说明在通用类类型中指定此约束,因为这两个可能的类型没有eps
共同的祖先,这意味着最终没有约束。
但是您仍然可以使您的类API强制此约束。
将构造函数设为私有,并提供工厂方法代替。
Object
并使用它,例如:
public class Foo<T> {
private Foo(){}
public static Foo<Integer> ofInteger(){
return new Foo<>();
}
public static Foo<Boolean> ofBoolean(){
return new Foo<>();
}
}
答案 1 :(得分:0)
根据另外this个SO问题,答案是否定的。
如果您想使用Integer
或Boolean
,则也不能使用该先前答案中定义的方法,因为据我所知,没有仅常见的类{> Integer
和Boolean
数据类型。
对于您而言,简单地创建接受Integer
或Boolean
参数的替代可能会更容易。
答案 2 :(得分:0)
是的,您可以更清楚地指定T的值。
如果要将其限制为单个类型,可以使用List<Integer>
或List<Boolean>
。
您还可以使用类似以下内容的方法:List<T extends Number>
,它将仅接受整数,浮点数......
答案 3 :(得分:0)
如果您没有确切的类,其子类为Boolean和Integer,则不能严格这样定义List。
您可以将列表定义为:
List<? super Object> list = new ArrayList<>();
但是在这种情况下,您可以在其中放置每个扩展Object的类,这当然不是您想要的,但是对于类似的问题可能会有帮助。
例如:
当您上过诸如动物,猫,狗之类的课程时。
然后您可以列出以下列表:
List<? super Animal> list = new ArrayList<>();
并在其中添加Animal的所有子类:)