这个问题是由StackOverflow关于不安全转换的问题引起的:Java Casting方法,不知道要转换为什么.在回答我遇到此问题的问题时,我无法根据纯粹的规范进行解释
我在Oracle文档的Java教程中找到了以下语句:
- 如有必要,插入类型铸件以保持类型安全. 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)