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

2022-09-04 04:32:24

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

public interface SomeInterface<T> {
     public T doSomething();
}

然后是第二个接口:

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

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

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

编辑(关于发布赏金):在这一点上,我在这个问题上寻找的是语言需要这种重复的原因。这就是到目前为止,答案中一直缺少的答案,以使答案被接受。


答案 1
public interface SomeRelatedInterface<T> {  
    T doSomethingRelated(SomeInterface<T> relative);
}

答案 2

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

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

这些是正交注意事项,因此您需要多个类型参数来表示它们。

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


推荐