【发布时间】:2010-06-16 18:09:47
【问题描述】:
给定界面:
public interface BasedOnOther<T, U extends BasedList<T>> {
public T getOther();
public void staticStatisfied(final U list);
}
BasedOnOther<T, U extends BasedList<T>> 在我的用例中看起来很丑。是因为T类型参数已经在BasedList<T>部分定义了,所以“丑”来自T需要输入两次。
问题:是否可以让 Java 编译器在泛型类/接口定义中从 BasedList<T> 推断泛型 T 类型?
最终,我想使用如下界面:
class X implements BasedOnOther<Y> {
public SomeType getOther() { ... }
public void staticStatisfied(final Y list) { ... }
} // Does not compile, due to invalid parameter count.
在哪里Y extends BasedList<SomeType>。
改为:
class X implements BasedOnOther<SomeType, Y> {
public SomeType getOther() { ... }
public void staticStatisfied(final Y list) { ... }
}
在哪里Y extends BasedList<SomeType>。
更新:ColinD 建议
public interface BasedOnOther<T> {
public T getOther();
public void staticSatisfied(BasedList<T> list);
}
不可能创建这样的实现:
public class X implements BasedOnOther<SomeType> {
public SomeType getOther() { ... }
public void staticStatisfied(MemoryModel list);
} // Does not compile, as it does not implement the interface.
MemoryModel extends BasedList<SomeType>,这是需要的(因为它提供了其他方法)。
【问题讨论】:
标签: java generics type-inference