相关疑难解决方法(0)

何时是类型擦除后输入的函数的泛型返回值?

这个问题是由StackOverflow关于不安全转换的问题引起的:Java Casting方法,不知道要转换为什么.在回答我遇到此问题的问题时,我无法根据纯粹的规范进行解释

我在Oracle文档的Java教程中找到了以下语句:

没有解释"如果有必要"究竟意味着什么,而且我根本没有Java语言规范中找到这些演员,所以我开始尝试.

让我们看看下面这段代码:

// Java source
public static <T> T identity(T x) {
    return x;
}
public static void main(String args[]) {
    String a = identity("foo");
    System.out.println(a.getClass().getName());
    // Prints 'java.lang.String'

    Object b = identity("foo");
    System.out.println(b.getClass().getName());
    // Prints 'java.lang.String'
}
Run Code Online (Sandbox Code Playgroud)

使用Java Decompiler编译javac和反编译:

// Decompiled code
public static void main(String[] paramArrayOfString)
{
    // The compiler inserted a cast to String to ensure …
Run Code Online (Sandbox Code Playgroud)

java generics type-erasure

14
推荐指数
1
解决办法
437
查看次数

标签 统计

generics ×1

java ×1

type-erasure ×1