Java 泛型 : Type mismatch: cannot convert from Integer to K

标签 java generics

以下代码抛出编译时异常

Type mismatch: cannot convert from Integer to K

我的理解是 K 应该处理扩展 Number 的任何值。

public <K extends Number> K getValue(){
    Integer a = new Integer(1);
    return a;//Type mismatch: cannot convert from Integer to K
}

(注意:这只是一个测试代码,用于提出我的问题,没有提供与我的实际场景无关的细节。)

最佳答案

这里的问题是 K 是一个扩展 Number 的类型,但它是 Number 的一个未知子类 这就是编译器引发此错误的原因,因为 Integer 只是 Number 的一个特定子类,因此它无法与任何潜在的目标类型匹配。

假设您想显式转换它以使其编译

public <K extends Number> K getValue(){
    Integer a = new Integer(1);
    return (K) a;
}

然后,如果您调用它时期望 Number 的任何子类(Integer 除外),您将得到一个 ClassCastException,这正是编译器想要的避免:

Double d = getValue(); <-- throws ClassCastException

作为解决方法,您可以使用 Number 作为返回类型来定义您的方法,如下所示:

public Number getValue() {
    return new Integer(1);
}

关于Java 泛型 : Type mismatch: cannot convert from Integer to K,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50479680/

相关文章:

ios - 在 iOS 中初始化泛型参数

java - Tomcat 8 无法通过 Ant 脚本部署

Java 无法解析的日期 : different number of characters in ms value

c# - 基于类型重载泛型类的构造函数

ios - Swift 中的泛型选择器 View

ios - 类型 '[T]'(数组类型)不符合协议(protocol)

java - 应用程序在 Eclipse 中使用 --add-modules=java.se.ee 运行,但不在命令行上运行

java - 如何使此代码更干燥

java - 如何在 Clojure/Java 中使用 SOAP?

c++ - 定义通用比较运算符