Jos*_*eph 2 java parameters overloading dynamic
我有一些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");
}
}
Run Code Online (Sandbox Code Playgroud)
运行此代码,java假设"true?"必须是一个字符串":new Object()"是一个对象而不是一个字符串..输出如下:
it's a string
it's an object
it's an object
Run Code Online (Sandbox Code Playgroud)
对于这类问题有解决方案/解释吗?
更新:
我也尝试过使用不同的方法:
变化:
testOverloading( true ? "Must be a string" : new Object());
Run Code Online (Sandbox Code Playgroud)
在
testOverloading( true ? "Must be a string" : new Program());
Run Code Online (Sandbox Code Playgroud)
和
public static void testOverloading(Object test) {
Run Code Online (Sandbox Code Playgroud)
在
public static void testOverloading(Program test) {
Run Code Online (Sandbox Code Playgroud)
输出是:
error: no suitable method found for testPoly(Object)
Run Code Online (Sandbox Code Playgroud)
所以我假设它是一个编译器限制,参数使用单行条件
实际上使用normal是正确的输出:
if (true)
testOverloading("Must be a string");
else
testOverloading(new Object());
output: it's a string
Run Code Online (Sandbox Code Playgroud)
true ? "Must be a string" : new Object()应该有一种类型的回报.在这种情况下,编译器将为返回的元素选择类层次结构中的最高类,即Object.