我在 java 重载和动态参数方面遇到一些问题..
import java.lang.*;
public class Program
{
public static void main(String []args){
testOverloading("Test string");
testOverloading(new Object());
testOverloading( true ? "Must be a string" : new Object());
}
public static void testOverloading(String test) {
System.out.println("it's a string");
}
public static void testOverloading(Object test) {
System.out.println("it's an object");
}
}
运行此代码,java 假设“true ?“必须是字符串”:new Object()”是一个对象而不是字符串..输出如下:
it's a string
it's an object
it's an object
此类问题有解决方案/解释吗?
更新:
我还尝试使用不同的方法:
改变:
testOverloading( true ? "Must be a string" : new Object());
在
testOverloading( true ? "Must be a string" : new Program());
和
public static void testOverloading(Object test) {
在
public static void testOverloading(Program test) {
输出是:
error: no suitable method found for testPoly(Object)
所以我必须假设这是使用单行条件的参数的编译器限制
事实上,使用正常的输出是正确的:
if (true)
testOverloading("Must be a string");
else
testOverloading(new Object());
output: it's a string
最佳答案
真的吗? “必须是字符串”:new Object()
应该有单一类型的返回值。在这种情况下,编译器将为返回的元素选择类层次结构中的最高类,即 Object
。
关于java - java 重载的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25570898/