Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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中引用嵌套的泛型参数吗? 我不确定这个术语是什么,但是考虑一个接口: public interface SomeInterface<T> { public T doSomething(); } public interface SomeRelatedInterface<T, D extends SomeInterface<T>> { public T doSomethingRelated(D relative); } 公共接口SomeInterface{ 公共T剂量测定法(); }_Java_Generics - Fatal编程技术网

可以在java中引用嵌套的泛型参数吗? 我不确定这个术语是什么,但是考虑一个接口: public interface SomeInterface<T> { public T doSomething(); } public interface SomeRelatedInterface<T, D extends SomeInterface<T>> { public T doSomethingRelated(D relative); } 公共接口SomeInterface{ 公共T剂量测定法(); }

可以在java中引用嵌套的泛型参数吗? 我不确定这个术语是什么,但是考虑一个接口: public interface SomeInterface<T> { public T doSomething(); } public interface SomeRelatedInterface<T, D extends SomeInterface<T>> { public T doSomethingRelated(D relative); } 公共接口SomeInterface{ 公共T剂量测定法(); },java,generics,Java,Generics,然后是第二个接口: public interface SomeInterface<T> { public T doSomething(); } public interface SomeRelatedInterface<T, D extends SomeInterface<T>> { public T doSomethingRelated(D relative); } public接口somerelated接口{ 公共T剂量相关(D相对

然后是第二个接口:

public interface SomeInterface<T> {
     public T doSomething();
}
public interface SomeRelatedInterface<T, D extends SomeInterface<T>> {
     public T doSomethingRelated(D relative);
}
public接口somerelated接口{
公共T剂量相关(D相对);
}
是否可以将第二个接口设计为只需要一个泛型参数,然后让doSomethingRelated方法在其声明中隐式提取返回类型。这是不合法的,但我想知道的是,是否可以通过其他方式做到这一点:

public interface <T> SomeRelatedInterface<D extends SomeInterface<T>> {
     public T doSomethingRelated(D relative);
}
public接口somerelated接口{
公共T剂量相关(D相对);
}
编辑(发布赏金):在这一点上,我在这个问题上寻找的是语言需要这种复制的原因。这就是迄今为止答案中缺少的让人接受的东西。

public interface somerelated interface{
public interface SomeRelatedInterface<T> {  
    T doSomethingRelated(SomeInterface<T> relative);
}
T剂量相关(某些界面相关); }
看看这是否适合您的需要:

public interface SomeRelatedInterface<T> {
     public  <D extends SomeInterface<T>> T doSomethingRelated(D relative);
}
public接口somerelated接口{
公共T剂量相关(D相对);
}

由于类型参数在编译时被删除,很遗憾,如果不指定T作为第二个类型参数,您就无法实现所需的功能,就像您在第一个示例中所做的那样

“在这一点上,我在这个问题上寻找的是该语言需要这种复制的原因”

好的,该语言要求您在示例中定义两个类型参数,因为您描述的问题中有两个类型参数:您希望方法在类型
T
SomeInterface
的实现中都是可变的

这些都是正交考虑因素,因此需要多个类型参数来表示它们


类型参数当然不需要在类/接口上定义;它们可以在方法上定义。J-16 SDiZ的答案允许您的相关类/接口仅具有一个类型参数。然后,第二个类型参数只在需要的地方声明,在
dosomethingreated
方法上好吧,我开始悬赏这个问题,不知道SO的行为是奖励某人答案(恭喜Daniel),我以为代表会得不到回报,我会失去它。哦,好吧

不管怎样,我终于有了答案。发件人:

不幸的是,为了向后兼容,new Map()表示原始类型,因此不能用于类型推断


因此,基本上在创建类并传入类型参数时,类型推断被禁用,以便为原始类型留出空间。因此,在我的例子中可能会有一些类型推断,但这将是一个更复杂的不同类型的类型推断来处理这个案例的问题,但没有完成。

我从那开始,但我希望能够为相对,所以这并不能解决问题。这不允许对D进行参数化,所以它可以是SomeInterface的任何实现,而不是特定的实现。抱歉,没有办法实现您想要的。我同意这可能不可能,但我不明白编译时擦除与它有什么关系-这仍然可以在编译时解决,看起来,擦除与这个问题没有任何关系,因为它的措辞是:为什么要回滚到java泛型标记?这是该站点上唯一一个带有该标记的问题,我将其回滚,因为我认为它适合于对java泛型感兴趣的人,而不是泛型作为一种语言概念。但是,如果这是网站上唯一一个带有该标签的问题,那么它确实不是很有用。也可能有一点碰撞?;)嗯,我确实认为这是一个好问题,显然我已经对它投了赞成票。T实际上是从类型参数推断出来的,我必须让一个使用接口的类重新声明它,这似乎是多余的。它在方法上可以很好地工作,只是在接口声明上不行,所以我的问题是。