java - java 重载的奇怪行为

标签 java dynamic parameters overloading

我在 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/

相关文章:

java - Java是如何实现哈希表的?

java - 我可以在不重新启动 JVM 的情况下将新证书添加到 keystore 吗?

c# - 在 C# 中动态评估字符串条件

swift - 在 Swift 中动态设置 willSet 和 didSet

performance - lua中的本地与全局

java - Android应用架构: how to share behavior between all screens

java - 如何在Java中抽象出不同的返回类型?

android - 在 Android 中显示表情符号

ruby-on-rails - 如何访问嵌套参数

c# - 每层应该进行哪些参数验证?