gpt4 book ai didi

java - Java泛型有没有办法模仿OR

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:02 25 4
gpt4 key购买 nike

编辑:我改变了一些例子来获得这个想法:

喜欢

 <Integer or Float>

...无需创建通用接口(interface)并为 Integer 和 Float 创建子类来实现它

如果没有,这样的事情可能更有意义并且更有用

 <E extends Number> <E = (Integer|Float)>

如果?是一个通配符,为什么我们不允许限制某些类型?

最佳答案

这是不可能的,我几乎看不到它有任何值(value)。您使用泛型来限制类型,例如在集合中。使用 or 运算符,您对类型的了解与对它们两者最具体的父类(super class)型的了解一样多,在本例中为 Object。那么为什么不直接使用 Object 呢?

假设的:

List<E extends String or Number> list = //...

list.get(0) 的类型是什么?是 String 还是 Number?但是你不能有这种类型的变量。它不能是 String,它不能是 Number - 它只能是... Object

更新:由于您将相关示例更改为:

<Integer or Float>

你为什么不直接说:

<Number>

?注意 Number具有允许您轻松提取 floatValue()intValue() 的方法。您真的需要确切的类型吗?


请注意,您可以使用运算符:

<E extends Serializable & Closeable>

这非常有意义 - 您可以在需要 SerializableCloseable 的地方使用 E 类型的变量。换句话说,E 必须同时扩展 SerializableCloseable。另请参阅:Java Generics Wildcarding With Multiple Classes .

关于java - Java泛型有没有办法模仿OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11633332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com