Tah*_*idi 4 java conditional-operator
我在ItemClass中有两种方法:
public void setValue(String v);
public void setValue(Double v);
Run Code Online (Sandbox Code Playgroud)
我想使用条件运算符来setVAlue在另一个类:
String str = ...
Double dbl = ...
item.setValue((condition) ? str : dbl);
Run Code Online (Sandbox Code Playgroud)
但编译说:
cannot find symbol
symbol : method setValue(java.lang.Object&java.io.Serializable&java.lang.Comparable<? extends java.lang.Object&java.io.Serializable&java.lang.Comparable<?>>)
Run Code Online (Sandbox Code Playgroud)
我认为编译器使用Double和String 最近的公共超类(超级接口)作为条件运算符的类型.但为什么?
cdh*_*wie 12
因为做任何其他事情都没有任何意义.三元条件运算符必须返回某些特定类型的值- 所有表达式必须在编译时生成特定类型.此外,请注意,重载解析也在编译时发生.您在此处尝试调用的行为(后期绑定)在Java中不存在于此表单中.
表达式的类型必须与true和false子表达式兼容.在这种情况下,最近的共同祖先类是Object,并且您没有setValue(Object)过载.
这是以工作方式重写所拥有内容的最简单方法:
if (condition) {
item.setValue(str);
} else {
item.setValue(dbl);
}
Run Code Online (Sandbox Code Playgroud)
您还可以提供一个setValue(Object)重载,检查传递的对象类型并委托给相应的setValue()重载,如果类型不可接受则抛出异常.
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |