gpt4 book ai didi

java - 在没有类型的情况下使用 Java 泛型 - 泛型删除?

转载 作者:行者123 更新时间:2023-12-02 11:16:26 28 4
gpt4 key购买 nike

看看这个方法:

public class Outer<E> {
public static class Inner{
public E value;
public Inner(E value){
this.value = value;
}
}
}

我们将使用以下代码来使用它:

Outer.Inner i = new Outer.Inner(5);
System.out.println(i.value);

这个东西不会编译,因为 E 在内部方法中使用。

我的问题是 - 我知道在编译时所有泛型都会被删除并替换为 Object。那么为什么这里的情况不是这样呢? E 将被 Object 替换,整个事情应该可以编译。

这是否意味着我们永远不能在没有类型的情况下使用泛型类? (我知道这是不好的做法,但我认为这应该可行)

谢谢。

最佳答案

这与类型删除无关。这只是因为您不能在任何静态声明中使用类型参数。作为Java Language Specification说:

It is a compile-time error to refer to a type parameter of a generic class C in any of the following:

  • the declaration of a static member of C (§8.3.1.1, §8.4.3.2, §8.5.1).

  • the declaration of a static member of any type declaration nested within C.

  • a static initializer of C (§8.7), or

  • a static initializer of any class declaration nested within C.

第一点适用于此。

所以即使这样也不能编译:

class Foo<T> {
public static void f(T param) {}
}

关于java - 在没有类型的情况下使用 Java 泛型 - 泛型删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59884263/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com