Objectタイプのパラメータ
1546 ワード
通常、API関数を提供する場合、log 4 jの中でlogオブジェクトを取得し、stringを転送することができ、もちろんclassを自動的に転送することもできます.
1.次の例では、パラメータタイプがObjectであることを再ロードします.呼び出し時にStringパラメータを入力します.ObjectもStringも満足します.結果はどうなりますか.
//出力log-string
2.では、呼び出しの方法を変えて、newはStringのObjectオブジェクトを出します.結果はどうですか.
//log-objectの出力
3.よし、強制的にタイプをObjectに指定しないと?
//出力log-string
まとめ:Objectタイプのリロードを提供する場合、関数は継承ツリーに基づいて対応するリロードを下から上へ探して実現します.
Objectタイプパラメータを提供するメリットも明らかです.そうしないとlog(Long l)、log(Byte b)はすべて一度実現しなければなりません(もちろん固定タイプもすべて実現することをお勧めしますが、プログラムでカスタマイズしたクラスでは困ります.デフォルト操作は提供できません)
StringのvalueOf関数を見ると、Objectパラメータが再ロードされます.
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";
}