代码之家  ›  专栏  ›  技术社区  ›  Aiko West

如何选择在不使用强制转换的情况下调用方法的哪个重载版本?

  •  6
  • Aiko West  · 技术社区  · 7 年前

    我对Java重载方法有一个问题。

    假设我有一个重载方法foo:

    public static String foo(String x) {
        return "foo-String: " + x;
    }
    
    public static String foo(Object x) {
        return "foo-Object: " + x;
    }
    

    如何实现以下功能:

    public static String useString() {
        return(foo("useString"));   
    }
    public static String useObject() {
        return(foo("useObject"));   
    }
    

    其中一个使用重载字符串方法,另一个使用重载对象方法?

    foo方法的调用应该使用字符串输入。(这意味着我不想与这样的演员合作

    return(foo((Object)"useObject")); 
    

    也许你能帮我解决这个问题

    编辑:

    以上只是一个练习示例。我在努力理解 过载 派遣 更好,正在寻找调用(和选择)的替代解决方案 超载

    3 回复  |  直到 6 年前
        1
  •  3
  •   Chetan Kinger    7 年前

    如果我们暂时撇开这背后的动机,试着回答直接的问题,你可以创建一个对象引用,而不是使用显式转换。

    public static String useObject() {
        Object obj = "useObject";
        return foo(obj);   
    }
    

    虽然最终结果是一样的,但您避免了显式 铸造 采用这种方法。

        2
  •  1
  •   SpaceTrucker    7 年前

    我想这有点作弊,但严格来说,这并没有在语法级别使用强制转换:

    public static String useObject() {
        return(foo(Object.class.cast("useObject")));   
    }
    
        3
  •  1
  •   developer_hatch    7 年前

    public class Main {
        public static String foo(String x) {
            return "foo-String: " + x;
        }
    
        public static String foo(Object x) {
            return "foo-Object: " + x;
        }
    
        public static String useString() {
            return(foo("useString"));
        }
        public static String useObject() {
            Object x = "useObject";
            return(foo(x));
        }
    
        public static void main(String[] args) {
            System.out.println(Main.useObject());
        }
    }
    

    方法 public static String foo(Object x) 将被调用