gpt4 book ai didi

Java泛型类参数类型推断

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:48 24 4
gpt4 key购买 nike

给定界面:

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 编译器推断泛型 TBasedList<T> 输入在通用类/接口(interface)定义中?

最终,我想使用如下界面:

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> ,这是必需的(因为它提供了其他方法)。

最佳答案

看起来您实际上并不需要类型参数 U extends BasedList<T> ,如果您实际上不需要在类中执行任何需要 BasedList<T> 的特定子类/实现的操作.界面可能只是:

public interface BasedOnOther<T> {
public T getOther();
public void staticSatisfied(BasedList<T> list);
}

编辑:根据您的更新,我认为您无法执行此操作。我认为您必须要么只使用原始声明,要么制作一些指定 T 的中间类型,比如:

public interface BasedOnSomeType<U extends BasedList<SomeType>>
extends BasedOnOther<SomeType, U>
{
}

public class X implements BasedOnSomeType<MemoryModel> { ... }

虽然这看起来有点浪费,而且我真的不认为原始声明看起来那么糟糕。

关于Java泛型类参数类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3055969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com