Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型,一种强制超级或子类型的方法_Java_Generics - Fatal编程技术网

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泛型本质上是编译时可测试的类型约束和断言。类型参数不能在运行时进行计算,这是应用您描述的过滤所必需的。很好,这是可行的。它看起来简单得很,但实际上并不可行我想起来了,谢谢。