【问题标题】:Generic types java : Type Safety warning泛型 java : 类型安全警告
【发布时间】:2021-03-27 12:01:25
【问题描述】:

当我想在泛型类中使用泛型类的类时,我收到了类型安全警告,下面的代码将更好地解释:

class A<U, V> {

    private class B<W, X> {
        X x;
        W w;
    }

    public A() {
        B<U, V> c = C.someMethod(B.class); // warning here
    }

    static class C {
        public static <T> T someMethod(Class<T> clazz) {
            return null;
        }
    }

}

有什么办法解决这个问题吗?

请注意,B 类是私有的。

【问题讨论】:

  • 您可以将函数声明为public static &lt;T, X, Y&gt; T&lt;X, Y&gt; someMethod,然后类型推断将完成这项工作,但这只是转移了您将如何从B.class 构建B&lt;U, V&gt; 实例的问题.这将需要转换为 T&lt;X, Y&gt;,这将具有相同类型的安全警告。
  • 除了抑制警告外,您无能为力。类文字将具有原始类型。

标签: java class generics nested generic-type-argument


【解决方案1】:

在此行中设置对编译器不重要的类型时,您的工作不正确:

B<U, V> c = C.someMethod(B.class);

对于编译器来说,只有 B 是恐慌的标志。 所以你应该写。

B<?, ?> c = C.someMethod(B.class);

【讨论】:

  • c 需要是 B 类型
猜你喜欢
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2013-05-17
相关资源
最近更新 更多