对 valueOf 的引用不明确
reference to valueOf is ambiguous
我遇到了:import static java.lang.Float.*;
,请注意 static
(实际上它是 import static java.lang.Math.*
但除此之外)。我以前从未见过,认为它非常有用,Float.valueOf("1.234f");
变成了 valueOf("1.234f")
。
但是当我也添加 import static java.lang.Integer.*;
时,我收到一条错误消息:"reference to valueOf is ambiguous"
因为这两个 class 都有那个(静态)方法。
有没有办法解决这个问题?在某处模棱两可之前,我只能使用它有限的次数?
旁注:
这种情况与为什么我们只能 extend
一个 class 有相同的背景吗,因为如果我们可以 extend
两个 classes,对于所有静态字段等等,命名会导致同样的问题吗?
正如您所注意到的,当您静态导入它时,您不需要引用 Float
来访问它的静态方法。但是因为 Float.valueOf(String string)
和 Integer.valueOf(String string)
都可用,所以当您调用 valueOf(String string)
时,编译器怎么知道您想要的是 Float 值还是 Integer 值?
编译器只匹配方法名称和签名:一个 "valueOf" 和一个字符串参数。它没有看到您的字符串中有小数点和 f:这就是 valueOf
所做的。
要解决歧义,请调用 Float.valueOf("1.234f")
或 Integer.valueOf("1234")
。
两个类都已经为你导入了,所以只需显式调用模棱两可的方法即可:
Float.valueOf(arg); // or Integer.valueOf(arg);
关于 "side note":
恕我直言,最好在一个新问题中问你的旁注,但要回答它:
不,这是非常不同的事情。 Java决定不允许多重继承以避免diamond problem。
- C++ 确实允许这样做,但这是该语言被认为复杂的原因之一。
- Scala 也允许它(称为特征)并通过继承顺序解决钻石问题来解决问题。 Read this good post explaining it.
这与有 2 个不同的 类 同名(在不同的包中)没有什么不同。只能导入 1 个,必须使用完全限定名称引用另一个。
我遇到了:import static java.lang.Float.*;
,请注意 static
(实际上它是 import static java.lang.Math.*
但除此之外)。我以前从未见过,认为它非常有用,Float.valueOf("1.234f");
变成了 valueOf("1.234f")
。
但是当我也添加 import static java.lang.Integer.*;
时,我收到一条错误消息:"reference to valueOf is ambiguous"
因为这两个 class 都有那个(静态)方法。
有没有办法解决这个问题?在某处模棱两可之前,我只能使用它有限的次数?
旁注:
这种情况与为什么我们只能 extend
一个 class 有相同的背景吗,因为如果我们可以 extend
两个 classes,对于所有静态字段等等,命名会导致同样的问题吗?
正如您所注意到的,当您静态导入它时,您不需要引用 Float
来访问它的静态方法。但是因为 Float.valueOf(String string)
和 Integer.valueOf(String string)
都可用,所以当您调用 valueOf(String string)
时,编译器怎么知道您想要的是 Float 值还是 Integer 值?
编译器只匹配方法名称和签名:一个 "valueOf" 和一个字符串参数。它没有看到您的字符串中有小数点和 f:这就是 valueOf
所做的。
要解决歧义,请调用 Float.valueOf("1.234f")
或 Integer.valueOf("1234")
。
两个类都已经为你导入了,所以只需显式调用模棱两可的方法即可:
Float.valueOf(arg); // or Integer.valueOf(arg);
关于 "side note": 恕我直言,最好在一个新问题中问你的旁注,但要回答它: 不,这是非常不同的事情。 Java决定不允许多重继承以避免diamond problem。
- C++ 确实允许这样做,但这是该语言被认为复杂的原因之一。
- Scala 也允许它(称为特征)并通过继承顺序解决钻石问题来解决问题。 Read this good post explaining it.
这与有 2 个不同的 类 同名(在不同的包中)没有什么不同。只能导入 1 个,必须使用完全限定名称引用另一个。