gpt4 book ai didi

java - 具有接口(interface)返回类型的通用方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:32 27 4
gpt4 key购买 nike

我有一个接口(interface)和一个值类,如下所示:

public interface ITest<T1> {
<T2> T1 test(OtherClass<T2> client);
}

基本上,它表示子类型必须实现返回 T1 的方法 test,无论实现子类型中的是什么。

其他类:

public class OtherClass<T> {
public T contents;
}

但是,当我想编写一个实现 test 的子类型并只返回它获得的客户端实例时,我遇到了编译错误。我想要的是统一 T1T2:

public class Test<T1> implements ITest<T1> {
@Override
public <T1> T1 test(OtherClass<T1> client) { // compile error
return client.contents;
}
}

有什么方法可以让这个类起作用吗?

最佳答案

<T1>基本上告诉任何类(class)“你选择 T1 的类型!”。这意味着在这种情况下 <T1>OtherClass<T1>引用相同的类型,而返回类型 T1指类(class)的T1 .如果重命名一个,您将看到错误:

@Override
public <OtherClassType> T1 test(OtherClass<OtherClassType> client) {
return client.contents; //you can't do that without casting OtherClassType to T1
}

如果您无法编辑 ITest接口(interface),编译它的唯一方法是通过转换,但你需要确保在这样做之前你确实可以转换(因为 OtherClass 可以返回任何类型,不一定是 T1 的子类。

编辑:编译器不允许这样做的确切原因是因为您有效地限制了 test方法只接受某些类型,而它重写的方法允许任何类型。

关于java - 具有接口(interface)返回类型的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27905188/

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