【问题标题】:Warning in java abstract generic methodjava抽象泛型方法中的警告
【发布时间】:2013-12-30 14:02:15
【问题描述】:

我有类似的东西:

public abstract class Base{
    public abstact T <T> method();
}

public class ExtendingClass extends Base{
    public SomeObject method(){
    }
}

但是,ExtendingClass#method 有警告 类型安全:ExtendingClass 类型的方法的返回类型 SomeObject 需要未经检查的转换以符合 来自 Base 类型的 T

你能告诉我为什么会这样吗?应该如何处理?

【问题讨论】:

  • 对我投反对票 - 您当前的代码示例已损坏。 Base 类无法编译。注意:我回滚了一个试图解决这个问题的编辑(但没有)——只有 OP 应该编辑问题中的代码。
  • 如果它只是显示问题的一个例子,是否需要?他确实说过“类似”
  • @RossDrew 我想是的,是的。没有提供演示特定问题的代码有一个完整的密切原因。现在,这不是我见过的最糟糕的例子,但我希望 OP 努力做到一点准确性。

标签: java generics warnings


【解决方案1】:
abstract class Base <T> {
    public abstract T method();
}



public class test extends Base<String>{

    @Override
    public String method(){
        return null;

    }
}

在编写具体示例时,必须为其传递正确的值,以便编译器可以在编译期间验证该值

【讨论】:

  • @kocko:我在回答中已经提到'编译器可以在编译期间验证值'
  • 我确实尝试过这个东西,警告就在那里。不返回'Object'的目的更复杂,我需要保留'T'。
  • @Roxana: Eclipse 没有给我任何警告:(
  • 是的,它现在可以工作了 - 我认为我的项目仍然“未刷新” - 谢谢
【解决方案2】:

你可以使用:

public abstract class Base<T> {
    public abstract T method();
}

和:

public class ExtendingClass extends Base<SomeObject >{

    public SomeObject method(){
        ...
    }

}

这是因为泛型参数不会出现在您的抽象方法声明之外的任何其他地方。

这个方法签名几乎等同于public abstract Object method()

来自javageneric methods tutorial

泛型方法允许使用类型参数来表达 方法的一个或多个参数类型之间的依赖关系 和/或其返回类型。如果没有这样的依赖,一个泛型 方法不应该使用。

【讨论】:

  • 这并不能解释为什么他会收到警告 :)
  • 我确实尝试过这个东西,警告就在那里。不返回'Object'的目的更复杂,我需要保留'T'。
  • 你试过让 Base 通用吗?你能在这里添加你的通用基本代码吗?
  • 是的,它现在可以工作了 - 我认为我的项目仍然“未刷新” - 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
  • 2018-07-05
  • 2019-10-10
  • 1970-01-01
  • 2012-03-01
相关资源
最近更新 更多