Java泛型,一种强制超级或子类型的方法
假设我有一个类和一个方法,如下所示:Java泛型,一种强制超级或子类型的方法,java,generics,Java,Generics,假设我有一个类和一个方法,如下所示: class MyClass<T> { void doStuff(Wrapper<T> wrapper) { //impl. } } class-MyClass{ 空隙度(包装器){ //impl。 } } 当然,参数“wrapper”的泛型边界可以修改为wrapper,但“接受任何内容”与“接受T类层次结构中的某些内容”不同。我还可以创建两个单独的方法,一个是,您可以尝试以下方法 <S ex
class MyClass<T> {
void doStuff(Wrapper<T> wrapper) {
//impl.
}
}
class-MyClass{
空隙度(包装器){
//impl。
}
}
当然,参数“wrapper”的泛型边界可以修改为
wrapper
,但“接受任何内容”与“接受T类层次结构中的某些内容”不同。我还可以创建两个单独的方法,一个是,您可以尝试以下方法
<S extends T> void doStuff(Wrapper<? super S> wrapper)
void doStuff(wrapper)这是一个抽象的有趣问题,但我很难看到在这种情况下,您所拥有的类型信息对于类型安全代码中的任何内容都是有用的。是的,我不太确定这是如何工作的。假设您有语法:List。然后,对该方法中面临问题的代码进行分析“我可以从列表中指定一个对象来引用某个类吗?”答案是“也许我可以,也许我不能”“@JohnBollinger我理解它有点凌乱。我会尝试清理一下。假设我的类是一个泛型集合,并且我有一个a->B->C的类层次结构。包装器类似于Prop,是一个类的已知属性,它是提前(通过codeden)知道的。方法是filter(Prop,V value)。一个集合可以包含As、Bs和Cs,按属性筛选应该是有效的,因为A没有属性,所以最终可以是Bs和Cs。另一方面,集合应该可以按属性筛选,因为C是A的子类型,并且具有该属性。Cont.@NeilCoffey(继续上一条注释)。一个集合不应该通过Prop进行过滤,这是不允许的,并且应该存在编译时错误。这实际上是一个公共API,我需要编译时错误(以及为什么我需要一个方法)我知道这不是最好的设计,甚至不是很好的设计,但这正是我目前的设计所需要的,除此之外,这似乎是一个很好的理论问题。@sydnal,我想我看到了你描述的想法,但我的观点是,我不认为你所说的我实际上问过,Java泛型可以提供一种类型安全的方法来实现它。请记住,Java泛型本质上是编译时可测试的类型约束和断言。类型参数不能在运行时进行计算,这是应用您描述的过滤所必需的。很好,这是可行的。它看起来简单得很,但实际上并不可行我想起来了,谢谢。