有关Oracle Java社区网站的文章作为示例(对于JPA转换器,但我认为这不相关)以下方法:
public Boolean convertToEntityAttribute(String y) {
String val = (String) y;
if(val.equals("Y")){
return true;
} else {
return false;
}
}
将String y转换为String val有什么用?是否有正当理由这样做?
原创文章:What's New in JPA
答案 0 :(得分:13)
这种演员完全没必要。我可以想象它是在
之前public Boolean convertToEntityAttribute(Object y) {
String val = (String) y;
...
}
但后来参数类型更改为String
,作者只是忘记删除演员。
答案 1 :(得分:3)
是否有正当理由这样做?
无论 1 。
但另一方面,Java编译器知道类型转换是不必要的,并将其优化掉。所以唯一的#34;损害"是可读性。
例如。
[stephen@blackbox tmp]$ cat Test.java
public class Test {
public void test (String x) {
String s = (String) x;
System.out.println(s);
}
}
[stephen@blackbox tmp]$ javac Test.java
[stephen@blackbox tmp]$ javap -c Test
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public void test(java.lang.String);
Code:
0: aload_1
1: astore_2
2: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
5: aload_2
6: invokevirtual #3 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
9: return
}
[stephen@blackbox tmp]$
语句String s = (String) x;
被编译为简单的加载和存储;没有checkcast
指令。
如果JIT编译器能够优化掉多余的checkcast
......如果它看到一个,我不会感到惊讶。
1 - ...手写代码。在生成的源代码中,冗余的类型转换可以用于使编写源代码生成器更容易。毕竟,生成代码的可读性在很大程度上是无关紧要的。
答案 2 :(得分:2)
这种多余的铸造是没用的。
当前代码可以简化为
public Boolean convertToEntityAttribute(String y) {
return "Y".equals(y);
}