gpt4 book ai didi

java条件运算符和不同类型

转载 作者:搜寻专家 更新时间:2023-11-01 01:07:56 25 4
gpt4 key购买 nike

我在 Item 类中有两个方法:

public void setValue(String v);
public void setValue(Double v);

我想在另一个类中使用条件运算符setVAlue:

String str = ...
Double dbl = ...
item.setValue((condition) ? str : dbl);

但是编译器说:

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<?>>)

我认为编译器使用 Double 和 String 的最近的公共(public)父类(super class)(超接口(interface)) 作为条件运算符的类型。但是为什么?

最佳答案

因为做任何其他事情都没有任何意义。三元条件运算符必须返回某些某些特定类型 的值——所有表达式都必须在编译时 生成特定类型。此外,请注意重载决议也在编译时发生。您尝试在此处调用的行为(后期绑定(bind))在 Java 的这种形式中不存在。

表达式的类型必须与 truefalse 子表达式兼容。在这种情况下,最近的公共(public)祖先类是 Object,并且您没有 setValue(Object) 重载。

这是以工作方式重写现有内容的最简单方法:

if (condition) {
item.setValue(str);
} else {
item.setValue(dbl);
}

您还可以提供一个 setValue(Object) 重载来检查传递的对象类型并委托(delegate)给适当的 setValue() 重载,如果类型是 Not Acceptable 。

关于java条件运算符和不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24967819/

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