当前位置: 首页 > 知识库问答 >
问题:

Java返回泛型类型问题:未经检查的重写返回类型需要未经检查的转换

蒋斯伯
2023-03-14

嗨,我在泛型类型和从IDE得到的警告方面有问题。我有一个保存泛型类型值的类:

public class Result <OUT>{
    private final OUT outputValue;
    
    public OUT getOutputValue() {
        return outputValue;
    }
}

我有一个抽象类:

public abstract class CustomSource {

      public abstract <T> SourceFunction<T> getSource();
}

以及扩展它的类:

public class OtherCustomSource extends CustomSource {

      @Override
      public SourceFunction<Result<MyEvent>> getSource() {
          ...some code...
      }
    }

IDE警告我:未经检查的重写返回类型需要未经检查的转换。我错过了什么?

共有1个答案

彭涵衍
2023-03-14
public abstract <T> SourceFunction<T> getSource();

这不是你打算做出的promise。这表示“对于每个T,我保证可以获得SourceFunction类型的源代码

public SourceFunction<Result<MyEvent>> getSource();

它说“具体来说,我可以给你一个类型结果的来源”

如果希望getSource只返回一个特定类型,则泛型应该位于CustomSource类中,而不是getSource函数中。

public abstract class CustomSource<T> {
  public abstract SourceFunction<T> getSource();
}

public class OtherCustomSource extends CustomSource<Result<MyEvent>> {

  @Override
  public SourceFunction<Result<MyEvent>> getSource() {
      ...some code...
  }
}

然后将OtherCustomSource用作CustomSource是有意义的

 类似资料:
  • 下面的代码来自一个名为ButterKnife的Android库。我正在弄清楚它是怎么工作的。 我试图重新创建此函数的行为: 和用法: 但是异常并非永远不会被捕获,而是在调用方法时在行中抛出。为什么? 还有,这到底是如何工作的?该方法如何知道要转换到什么?

  • 我想通过TypeScript泛型定义函数返回类型。所以R可以是我将定义的任何东西。 <代码>。。。许诺 错误:(29,9)TS2322:类型“字符串”不可分配给类型“R”。“字符串”可分配给类型“R”的约束,但“R”可以用约束“{}”的不同子类型实例化。

  • 我在我的Java程序中写了这个函数: 这就是我所说的: 它是有效的,但我觉得我应该能够省略第一个参数,并从返回类型(结果被分配到的类型)推断出它。这可能吗?如果是,语法是什么?

  • 问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的

  • 我想让一个函数返回一个保证实现两个接口的对象。编译时不一定知道确切的对象。我的代码看起来像: 在尝试编译时,我遇到以下错误: 你好世界java:13:错误:不兼容的类型:C无法转换为T 返回新的C() ^ 其中T是一个类型变量: T扩展了方法f(布尔值) HelloWorld中声明的a,B。java:14:错误:不兼容的类型:D无法转换为T 返回新的D() ^ 其中T是一个类型变量: T扩展了方法