当前位置: 首页 > 面试题库 >

有没有办法用Java来说“方法返回这个”?

云项禹
2023-03-14
问题内容

有没有办法this使用泛型说“此方法返回”?

当然,我想在子类中重写此方法,因此声明应与一起使用@Override

这是一个例子:

class Base {
    public Base copyTo (Base dest) {
        ... copy all fields to dest ...
        return this;
    }
}
class X extends Base {
    @Override
    public X copyTo (X dest) {
        super.copyTo (dest);
        ... copy all fields to dest ...
        return this;
    }
}

public <T extends Base> T copyTo (Base dest)根本不起作用:我收到“类型不匹配:无法从Base转换为T”。如果我强制使用强制转换,则覆盖将失败。


问题答案:

不,无法表达这一点。只需声明该方法即可返回类的类型。Java具有协变返回类型,因此无论如何您都可以重写方法以返回更特定的类型。

如果您想为此添加一些标记,则可以随时引入自己的注释-但是不要期望任何其他工具对此有任何特别的注意。

编辑:oxbow_lakes的答案的确确实提供了在大多数情况下都可以使用的功能,但是我相信有很多方法可以使您欺骗,从而使您实际上正在处理其他类型。(无论如何,从实验的记忆中来。)请注意,这类似于Java枚举的工作方式。



 类似资料:
  • 因为这个方法是在运行时执行的,所以需要对它进行测试吗

  • 我只是想知道我是否有可能返回activePodcastViewData。每当我试图在GlobalScopeactivePodcastViewData.Without调用它时,我都不允许返回,我确实让一切正常工作fine.However我更新了我的存储库,将挂起方法添加到it.Hence我正在获取挂起函数应该只从协程或另一个挂起函数调用。 fun getPodcast(podcastSummaryV

  • 我需要调用一个方法:myMethod(双...选项卡),但我通过其他方法调用获取此数组的元素。现在我做的是: 但是有了它,myMethod是这样声明的: 我想知道如何使用bytebuddy来代替: 或 此外,属性“form”是一个动态检索方法,因此在“for”中执行的循环数永远不会相同。所以有时我可以调用这样的表单方法:或或

  • 问题内容: 我有一个方法返回基类的集合: 由于()的返回类型与方法()的返回类型不匹配,因此无法编译。我理解为什么会这样:由于泛型类型不同,所以两个类之间没有继承关系。 有很多方法可以解决编译器错误,从将方法的返回类型更改为不使用Arrays.asList并将派生对象之一转换为Base。 当解析Arrays.asList调用的通用类型时,有没有办法告诉编译器使用其他但兼容的类型?(我一直在尝试使用

  • 给出一个由N个整数a组成的序列,用a[1],a[2]….a[N]表示。序列中的每个整数都有一个与其相关联的值W[1],W[2]……。W[N]。你必须选择给定数组a的一个子序列,使a中的所有元素都是严格递增的,并且在这个选定的子序列中元素的值之和是最大的。你必须打印这个最大值。 样本输入 我因为对比关系而变得很虚弱 约束1<=T<=51<=N<=2000001<=a[i]<=10^9,其中i∈[1.

  • 本文向大家介绍数组有没有length()这个方法? String有没有length()这个方法?相关面试题,主要包含被问及数组有没有length()这个方法? String有没有length()这个方法?时的应答技巧和注意事项,需要的朋友参考一下 答:数组没有length()这个方法,有length的属性。String有有length()这个方法。