Java泛型参数界定到任何一个类型的范围
发布时间:2020-12-14 16:21:29 所属栏目:Java 来源:网络整理
导读:是否有一种语法或解决方法来将泛型类型参数限制为任何一种类型的类型? 我知道您可以将类型限制为所有类型的所有类型(即AND逻辑): public class MyClassT extends ComparableT Serializable { } // legal syntax 有OR逻辑版本,就是这样的: public class My
是否有一种语法或解决方法来将泛型类型参数限制为任何一种类型的类型?
我知道您可以将类型限制为所有类型的所有类型(即AND逻辑): public class MyClass<T extends Comparable<T> & Serializable> { } // legal syntax 有OR逻辑版本,就是这样的: public class MyClass<T extends Comparable<T> | Serializable> { } // illegal syntax 如果没有支持这个的语法(我不认为有),是否有一个很好的模式的解决方法或方法? 对于某些上下文,一个用例可能是: /** @return true if the obj is either has the same id,or if obj is the same as id */ public <T extends MyClass | String> boolean sameAs(T obj) { if (obj instanceof String) return this.id.equals(obj); if (obj instanceof MyClass) return this.id.equals(((MyClass)obj).id); return false; } 人们似乎正在挂上上面我方法示例的准确语义.我们来试试看吧 public class MyWrapper<T extends A | B> { // my class can wrap A or B (unrelated classes). Yes I will probably use instanceof } 编辑: 有人对“不纯”的例子发表了评论.那么一个解决方法是使用工厂方法根据传入对象的类来选择我的具体类,但是该工厂方法必须使用instanceof,所以你只是将instanceof移动到另一个地方 – 你仍然需要的instanceof. 还是这个想法不是一个好主意? 解决方法
否则,除非所有类型都具有非空联合类型,否则不会有任何意义.它们都是实现的接口,或者它们都被扩展的基类,在这种情况下,你只需指定联合类型.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |