zoukankan      html  css  js  c++  java
  • Print工具类

    这篇文章已经废弃。

    实际开发中,打印信息只会用日志框架(Log4j2)。

    受到Thinking in Java中静态引入(import static)的启发,

    Deolin也打算写一个方便自己的工具类,先从最简单的打印开始。

    为了方便日后管理,代码以类库“commons-simplify”的形式托管到了Github

    工具类主要利用了 根据参数编译期的类型来选择哪个重载方法 的原理。

    作用是省去了诸如System.out.println() 和System.out.print() 这类的模块代码,

    顺便还兼顾了数组、Collection、Map中的遍历打印。

    以下是测试类,工具类覆盖了测试类中出现的所有情况,基本上也是日常开发中最常见的需要打印的情况。

     1 import static io.deolin.commons.simplify.Print.*;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Arrays;
     5 import java.util.HashMap;
     6 import java.util.List;
     7 import java.util.Map;
     8 
     9 public class PrintTest {
    10 
    11     private static List<String> c = new ArrayList<String>(Arrays.asList("c1", "c2", "c3"));
    12 
    13     private static String[] a = { "a1", "a2", "a3" };
    14 
    15     private static Map<String, String> m = new HashMap<String, String>();
    16 
    17     private static HashMap<String, String> hm = new HashMap<String, String>();
    18 
    19     static {
    20         m.put("k1", "v1");
    21         m.put("k2", "v2");
    22         m.put("k3", "v3");
    23         hm.put("k11", "v11");
    24         hm.put("k22", "v22");
    25         hm.put("k33", "v33");
    26     }
    27 
    28     private static char[] pa1 = { 101, 102 };
    29 
    30     private static boolean[] pa2 = { false, true };
    31 
    32     private static byte[] pa3 = { 1, 2 };
    33 
    34     private static short[] pa4 = { 99, 98 };
    35 
    36     private static int[] pa5 = { 111111, 222222 };
    37 
    38     private static long[] pa6 = { 123456789L, 987654321L };
    39 
    40     private static float[] pa7 = { 1.0F, 2.0F };
    41 
    42     private static double[] pa8 = { 1234.56789F, 9876.54321F };
    43 
    44     public static void main(String[] args) {
    45         p();
    46         p(12);
    47         p("a");
    48         p(a);
    49         p(pa1);p(pa2);p(pa3);p(pa4);p(pa5);p(pa6);p(pa7);p(pa8);
    50         p(c);
    51         p(m);
    52         p(hm);
    53         ln(12);
    54         ln("a");
    55         ln(a);
    56         ln(pa1);p();ln(pa2);p();ln(pa3);p();ln(pa4);p();ln(pa5);p();ln(pa6);p();ln(pa7);p();ln(pa8);p();
    57         ln(c);
    58         ln(m);
    59         ln(hm);
    60     }
    61 
    62 }

    根据参数编译期的类型来选择哪个重载方法

    class A {}
    class B extends A {}
    class C extends B {}
    
    class Demo {
        public static void main(String[] args) {
            A ac = new C();
            B bc = new C();
            C cc = new C();
            method(ac);
            method(bc);
            method(cc);
        }
    
        static void method(A a) {
            p("You are a A");
        }
    
        static void method(B b) {
            p("You are a B");
        }
    
        static void method(C c) {
            p("You are a C");
        }
    
    }
    You are a A
    You are a B
    You are a C

    1、如果把方法method(A a)注释掉,那么method(ac)编译出错,因为'A' IS-NOT-A 'B'而且 'A' IS-NOT-A 'C',

    除非再定义一个方法method(Object a),不然ac引用将没有方法可选,引起编译报错。

    2、如果把方法method(C c)注释掉,什么都不会发生,但是运行结果改变了

    You are a A
    You are a B
    You are a B

    和1、中的ac引用类似,cc也失去了对口的重载方法,但是由于'C' IS-A 'B',

    所以method(cc)中,‘C cc’先向上转型成了‘B cc’,然后进入了方法method(B b),打印了“You are a B”。

     

  • 相关阅读:
    如释重负(纪——写完作业论文)
    安装sql2005中文版时提示系统配置检查器失败,消息为“性能监视器计数器检查失败”
    Get ConnectString Form Web.config
    如何在ASP.NET中实现防盗链[转]
    Authentication and Authorization
    上传大步的自唱Music,绝对好听!
    "某个程序安装已在安装计算机上创建挂起的文件操作" 解决办法
    WebM给我们带来什么?H.264又给我们带来什么?Google不支持H.264对未来会产生怎样的影响? 人工智能
    机器学习初探 人工智能
    函数式编程学习之路(九) 人工智能
  • 原文地址:https://www.cnblogs.com/deolin/p/6921064.html
Copyright © 2011-2022 走看看