返回类型为“ <T扩展...>”的意外编译器警告

ᴇʟᴇvᴀтᴇ

当我编译以下Java代码(使用Oracle JDK 1.7.0_25)时:

public class StackOverflowQuestion {

    interface Example {

        <T extends Example> T init();
    }

    static class ExampleImpl implements Example {

        @Override
        public ExampleImpl init() {
            return this;
        }
    }
}

我收到警告:

StackOverflowQuestion.java:11: warning: [unchecked] init()
  in ExampleImpl implements <T>init() in Example
        public ExampleImpl init() {
                           ^
  return type requires unchecked conversion from ExampleImpl to T
  where T is a type-variable:
    T extends Example declared in method <T>init()

我不明白为什么该类实现时会说“返回类型需要未经检查的转换” Example,据我所知,这是一个有效的返回类型。

谁能向我解释怎么了?

保罗·波丁顿

中的泛型方法Example应该T可以在任何可以扩展的类型的地方工作Example,但是您尝试以ExampleImpl始终返回a的方式实现它ExampleImpl如果ExampleImpl是唯一实现的类Example,则可以这样做,但是如果还有其他类可以ClassCastException在运行时获取

在下面的例子中,我们实例化一个新的ExampleImpl,将其转换为基本接口,然后调用泛型方法init()T等于ExampleImpl2应该返回一个ExampleImpl2,但是自从你返回以来this,它抛出了一个ClassCastException这就是为什么您的代码必须生成警告的原因。

public class StackOverflowQuestion {

    interface Example {

        <T extends Example> T init();
    }

    static class ExampleImpl implements Example {

        @Override
        public ExampleImpl init() {
            return this;
        }
    }

    static class ExampleImpl2 implements Example {

        @Override
        public <T extends Example> T init() {
            return null;
        }
    }

    public static void main(String[] args) {
        ExampleImpl2 e2 = ((Example) new ExampleImpl()).<ExampleImpl2>init();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

kotlin编译器返回此类型的警告

来自分类Dev

Elixir编译器警告忽略的函数返回值

来自分类Dev

C:编译器警告“返回会从指针目标类型中丢弃限定符”

来自分类Dev

将集合过滤为指定类型会生成编译器警告

来自分类Dev

编译器如何区分<?当它们看起来在类型擦除后都被编译为同一事物时,将它们从<Number>扩展为Number?

来自分类Dev

当编译器说类型为Any时,Scala会返回一个集合

来自分类Dev

如何允许编译器为模板化的 get 函数推导出正确的返回类型?

来自分类Dev

<T将Enum <T >> T []扩展为Java 8中的返回类型

来自分类Dev

Haskell中是否有未标记联合类型的编译器扩展?

来自分类Dev

如何使用闭包编译器在javascript中注释扩展通用类型的类

来自分类Dev

编译器找不到通用类型类的C#扩展方法

来自分类Dev

如何使用闭包编译器在javascript中注释扩展通用类型的类

来自分类Dev

“ T”不包含“ Foo”的定义,最佳扩展方法重载需要类型为“ IType”的接收器

来自分类Dev

Element 为 Optional 且返回类型为 Wrapped 的数组扩展

来自分类Dev

Scala:如何让编译器从Seq [T]类型的函数参数推断类型?

来自分类Dev

有关gcc中的punning类型的编译器警告

来自分类Dev

闭包编译器警告-HTMLCanvasElement和元素类型不匹配

来自分类Dev

Java:尝试将错误类型用作Map键时出现编译器或Eclipse警告

来自分类Dev

如何解决编译器特定的“格式中未知转换类型字符'z'”的警告?

来自分类Dev

Ada-关于“ mod 64”类型定义的编译器警告

来自分类Dev

有关gcc中的punning类型的编译器警告

来自分类Dev

闭包编译器警告-HTMLCanvasElement和元素类型不匹配

来自分类Dev

仅允许枚举的子集作为返回值-或如何使编译器警告我?在C ++中

来自分类Dev

当函数缺少返回值时,编译器会生成警告但不会产生错误?

来自分类Dev

编译器不会在返回本地指针时发出警告

来自分类Dev

当函数缺少返回值时,编译器会生成警告但不会产生错误?

来自分类Dev

如何在VS2013中为所有项目设置编译器警告级别?

来自分类Dev

为什么编译器没有警告我有关if语句为空的信息?

来自分类Dev

svelte-i18n-Svelte Rollup编译器警告:`this`已被重写为`undefined`

Related 相关文章

  1. 1

    kotlin编译器返回此类型的警告

  2. 2

    Elixir编译器警告忽略的函数返回值

  3. 3

    C:编译器警告“返回会从指针目标类型中丢弃限定符”

  4. 4

    将集合过滤为指定类型会生成编译器警告

  5. 5

    编译器如何区分<?当它们看起来在类型擦除后都被编译为同一事物时,将它们从<Number>扩展为Number?

  6. 6

    当编译器说类型为Any时,Scala会返回一个集合

  7. 7

    如何允许编译器为模板化的 get 函数推导出正确的返回类型?

  8. 8

    <T将Enum <T >> T []扩展为Java 8中的返回类型

  9. 9

    Haskell中是否有未标记联合类型的编译器扩展?

  10. 10

    如何使用闭包编译器在javascript中注释扩展通用类型的类

  11. 11

    编译器找不到通用类型类的C#扩展方法

  12. 12

    如何使用闭包编译器在javascript中注释扩展通用类型的类

  13. 13

    “ T”不包含“ Foo”的定义,最佳扩展方法重载需要类型为“ IType”的接收器

  14. 14

    Element 为 Optional 且返回类型为 Wrapped 的数组扩展

  15. 15

    Scala:如何让编译器从Seq [T]类型的函数参数推断类型?

  16. 16

    有关gcc中的punning类型的编译器警告

  17. 17

    闭包编译器警告-HTMLCanvasElement和元素类型不匹配

  18. 18

    Java:尝试将错误类型用作Map键时出现编译器或Eclipse警告

  19. 19

    如何解决编译器特定的“格式中未知转换类型字符'z'”的警告?

  20. 20

    Ada-关于“ mod 64”类型定义的编译器警告

  21. 21

    有关gcc中的punning类型的编译器警告

  22. 22

    闭包编译器警告-HTMLCanvasElement和元素类型不匹配

  23. 23

    仅允许枚举的子集作为返回值-或如何使编译器警告我?在C ++中

  24. 24

    当函数缺少返回值时,编译器会生成警告但不会产生错误?

  25. 25

    编译器不会在返回本地指针时发出警告

  26. 26

    当函数缺少返回值时,编译器会生成警告但不会产生错误?

  27. 27

    如何在VS2013中为所有项目设置编译器警告级别?

  28. 28

    为什么编译器没有警告我有关if语句为空的信息?

  29. 29

    svelte-i18n-Svelte Rollup编译器警告:`this`已被重写为`undefined`

热门标签

归档