是否可以在java中引用嵌套的generics参数?

我不确定这个技术术语是什么,但考虑一个界面:

public interface SomeInterface { public T doSomething(); } 

然后是第二个界面:

 public interface SomeRelatedInterface<T, D extends SomeInterface> { public T doSomethingRelated(D relative); } 

是否可以将第二个接口设计为只需要一个通用参数,然后让doSomethingRelated方法在其声明中隐式提取返回类型。 这不合法,但我想知道是否可以通过其他方式完成:

 public interface  SomeRelatedInterface<D extends SomeInterface> { public T doSomethingRelated(D relative); } 

编辑(在发布赏金时):此时我在这个问题上寻找的是语言需要这种复制的原因。 这是迄今为止一直被接受的答案所遗漏的内容。

 public interface SomeRelatedInterface { T doSomethingRelated(SomeInterface relative); } 

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

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

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

类型参数当然不需要在类/接口上定义; 它们可以在方法上定义。 J-16 SDiZ的答案允许您的相关类/接口只有一个类型参数。 然后,在doSomethingRelated方法上,仅在需要的地方声明第二个类型参数

好吧,我开始对这个问题给予赏金,并且不知道SO的行为是给某人答案(祝贺丹尼尔),我认为代表会没有报酬,我会失去它。 那好吧。

无论如何,我终于有了答案。 从这里 :

不幸的是,出于向后兼容的目的,新的Map()表示原始类型,因此不能用于类型推断。

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

看看这是否适合您的需要:

 public interface SomeRelatedInterface { public > T doSomethingRelated(D relative); } 

由于类型参数在编译时被擦除,恕我直言,遗憾的是,如果不将T指定为第二个类型参数,就无法实现您想要的效果,就像您在第一个示例中所做的那样。