我遇到了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"
,因为这两个类都有(静态)方法。
没有办法吗?我可以在它模糊不清的地方使用它只有一段时间吗?
旁注:
这种情况与我们为什么只能extend
一个类的背景相同,因为如果我们可以extend
两个类,对于所有静态字段等,命名可能会导致同样的问题吗? / p>
答案 0 :(得分:5)
如您所知,在静态导入静态方法时,无需引用Float
来访问静态方法。但由于Float.valueOf(String string)
和Integer.valueOf(String string)
都可用,编译器如何知道在调用valueOf(String string)
时是否需要浮点值或整数值?
编译器仅匹配方法名称和签名:“valueOf”和单个字符串参数。它没有看到你的字符串中有小数点和f:这就是valueOf
的作用。
要解决歧义,请拨打Float.valueOf("1.234f")
或Integer.valueOf("1234")
。
答案 1 :(得分:2)
这两个类已经为你导入了,所以只需要明确地调用不明确的方法:
Float.valueOf(arg); // or Integer.valueOf(arg);
答案 2 :(得分:0)
关于“旁注”: 恕我直言,最好在一个新问题中提问你的旁注,但要回答: 不,这是一个非常不同的事情。 Java决定不允许多重继承来避免diamond problem。
答案 3 :(得分:0)
这与两个具有相同名称的不同类(在不同的包中)没有什么不同。只能输入1,必须使用完全限定名称引用另一个。