Java重载的奇怪行为

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)

Lui*_*oza 7

true ? "Must be a string" : new Object()应该有一种类型的回报.在这种情况下,编译器将为返回的元素选择类层次结构中的最高类,即Object.