Objectタイプのパラメータ

1546 ワード

通常、API関数を提供する場合、log 4 jの中でlogオブジェクトを取得し、stringを転送することができ、もちろんclassを自動的に転送することもできます.
    public static Logger getLogger(String name)
    {
        return LogManager.getLogger(name);
    }

    public static Logger getLogger(Class clazz)
    {
        return LogManager.getLogger(clazz.getName());
    }

 
 
1.次の例では、パラメータタイプがObjectであることを再ロードします.呼び出し時にStringパラメータを入力します.ObjectもStringも満足します.結果はどうなりますか.
public class Overload {

	public static void log(Object o) {
		System.out.println("log -object");
	}
	
	public static void log(String o) {
		System.out.println("log -string");
	}
	
	public static void main(String[] args) {
		log("how");

	}
}

//出力log-string
 
2.では、呼び出しの方法を変えて、newはStringのObjectオブジェクトを出します.結果はどうですか.
	public static void main(String[] args) {
		Object a = new String("xx");
		log(a);
	}

//log-objectの出力
 
3.よし、強制的にタイプをObjectに指定しないと?
	public static void main(String[] args) {
		log(new String("xx"));
	}

//出力log-string
 
 
まとめ:Objectタイプのリロードを提供する場合、関数は継承ツリーに基づいて対応するリロードを下から上へ探して実現します.
Objectタイプパラメータを提供するメリットも明らかです.そうしないとlog(Long l)、log(Byte b)はすべて一度実現しなければなりません(もちろん固定タイプもすべて実現することをお勧めしますが、プログラムでカスタマイズしたクラスでは困ります.デフォルト操作は提供できません)
StringのvalueOf関数を見ると、Objectパラメータが再ロードされます.
    public static String valueOf(Object obj)
    {
        return obj != null ? obj.toString() : "null";
    }