java Object类型的参数

通常提供API函数的时候,会实现多种参数类型,比如:log4j里面获取log对象,可以传string,当然也可以更方便的传class进去自动转string

  1. public static Logger getLogger(String name)  
  2. {  
  3.     return LogManager.getLogger(name);  
  4. }  
  5.   
  6. public static Logger getLogger(Class clazz)  
  7. {  
  8.     return LogManager.getLogger(clazz.getName());  
  9. }  
    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,结果会如何呢?

  1. public class Overload {  
  2.   
  3.     public static void log(Object o) {  
  4.         System.out.println(”log -object”);  
  5.     }  
  6.       
  7.     public static void log(String o) {  
  8.         System.out.println(”log -string”);  
  9.     }  
  10.       
  11.     public static void main(String[] args) {  
  12.         log(”how”);  
  13.   
  14.     }  
  15. }  
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对象来,结果如何呢?

  1. public static void main(String[] args) {  
  2.     Object a = new String(“xx”);  
  3.     log(a);  
  4. }  
  public static void main(String[] args) {
        Object a = new String("xx");
        log(a);
    }

 //输出 log -object

 

3.好吧,如果不强制指定类型为Object呢?

  1. public static void main(String[] args) {  
  2.     log(new String(“xx”));  
  3. }  
 public static void main(String[] args) {
        log(new String("xx"));
    }

 //输出  log -string

 

 

总结:在提供Object类型重载的时候,函数还是会根据继承树从下往上找对应的重载实现。

提供Object类型参数的好处也是明显的,否则 log(Long l),log(Byte b)就全得实现一次了(当然固定类型也是推荐全部实现的,但是对于程序中自定义的类就不好办了,无法提供默认操作)

看String的valueOf函数就重载了Object参数:

  1. public static String valueOf(Object obj)  
  2. {  
  3.     return obj != null ? obj.toString() : “null”;  
  4. }  
    public static String valueOf(Object obj)
    {
        return obj != null ? obj.toString() : "null";
    }
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值