作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
编辑:我改变了一些例子来获得这个想法:
喜欢
<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>
这非常有意义 - 您可以在需要 Serializable
或 Closeable
的地方使用 E
类型的变量。换句话说,E
必须同时扩展 Serializable
和 Closeable
。另请参阅:Java Generics Wildcarding With Multiple Classes .
关于java - Java泛型有没有办法模仿OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11633332/
我是一名优秀的程序员,十分优秀!