这篇文章已经废弃。

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

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

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

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

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

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

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

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

 import static io.deolin.commons.simplify.Print.*;

 import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class PrintTest { private static List<String> c = new ArrayList<String>(Arrays.asList("c1", "c2", "c3")); private static String[] a = { "a1", "a2", "a3" }; private static Map<String, String> m = new HashMap<String, String>(); private static HashMap<String, String> hm = new HashMap<String, String>(); static {
m.put("k1", "v1");
m.put("k2", "v2");
m.put("k3", "v3");
hm.put("k11", "v11");
hm.put("k22", "v22");
hm.put("k33", "v33");
} private static char[] pa1 = { 101, 102 }; private static boolean[] pa2 = { false, true }; private static byte[] pa3 = { 1, 2 }; private static short[] pa4 = { 99, 98 }; private static int[] pa5 = { 111111, 222222 }; private static long[] pa6 = { 123456789L, 987654321L }; private static float[] pa7 = { 1.0F, 2.0F }; private static double[] pa8 = { 1234.56789F, 9876.54321F }; public static void main(String[] args) {
p();
p(12);
p("a");
p(a);
p(pa1);p(pa2);p(pa3);p(pa4);p(pa5);p(pa6);p(pa7);p(pa8);
p(c);
p(m);
p(hm);
ln(12);
ln("a");
ln(a);
ln(pa1);p();ln(pa2);p();ln(pa3);p();ln(pa4);p();ln(pa5);p();ln(pa6);p();ln(pa7);p();ln(pa8);p();
ln(c);
ln(m);
ln(hm);
} }

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

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”。

Print工具类的更多相关文章

  1. easyui DataGrid 工具类之 WorkbookUtil class

    /** * @Title: WorkbookUtil.java * @Description: excel工具类 * @date 2014年5月29日 上午10:36:42 * @version V1 ...

  2. easyui DataGrid 工具类之 TableUtil class

    import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import java.util.HashM ...

  3. 4 多表代替密码之Hill 密码_1 矩阵工具类

    在说明Hill加密之前要先复习线性代数的知识,主要是关于矩阵的一些运算和概念. 一.矩阵的逆: 定义方阵M的逆矩阵应该满足M*M^-1==I,其中I是单位矩阵,比如: 但是这个地方是对英文字母进行加密 ...

  4. 分享自己配置的HttpURLConnection请求数据工具类

    >>该工具类传入string类型url返回string类型获取结果import java.io.BufferedReader;import java.io.InputStream;impo ...

  5. Rhino+envjs-1.2.js 在java运行网站js 工具类

    java爬虫遇到个页面加密的东西,找了些资料学习学习 做了个java运行js的工具类,希望对大家有用,其中用到client(获取js)可以自行换成自己的client.主要是用了 Rhino就是Java ...

  6. SharePreference 工具类封装

    import java.util.List;import java.util.Map;import java.util.Set;import com.alibaba.fastjson.JSON;imp ...

  7. Android快速开发系列 10个常用工具类

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...

  8. 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API

    ---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...

  9. 第二章 DateTime工具类

    项目中经常需要将DateTime转化成各种格式的String类型,或将各种类型的String转为DateTime类型. 本文提供一个DateTime与String的转换工具类: import org. ...

随机推荐

  1. hdu 6197 array array array LIS

    正反跑一次LIS,取最大的长度,如果长度大于n-k就满足条件. ac代码: #include <cstdio> #include <cstring> #include < ...

  2. (三)springmvc之注解的基本使用

    一.@Controller @Controller 标记一个类是Controller 二.RequestMapping  地址映射 2.1 Value的操作. 注解在类上面    (父)       ...

  3. win10 amd显卡开机黑屏很久

    转载自:https://jingyan.baidu.com/article/3c48dd34844e0ce10ae35865.html 升级win10后,使用a卡的小伙伴应该会大为恼火,开机竟然需要黑 ...

  4. luogu2657-Windy数题解--数位DP

    题目链接 https://www.luogu.org/problemnew/show/P2657 分析 第一道数位DP题,发现有点意思 DP求\([L,R]\)区间内的XXX个数,很套路地想到前缀和, ...

  5. optparser模块 与 ZIP爆破(Python)

    optparser模块: 为脚本传递命令参数. 初始化: 带 Usage 选项(-h 的显示内容 Usage:): >>> from optparse import OptionPa ...

  6. Input system (输入子系统)

    Input system (输入子系统) 以前写一些输入设备(键盘,鼠标等)的驱动都是字符设备,混杂设备处理的,linux开源社区的大神门看到了这大量的输入设备如此分散不堪,就想有木有一种机制,可以对 ...

  7. vim文件时自动添加作者、时间、版权等信息

    在工作中,搞运维的工程师往往会编写或完善自动化脚本时,都会手动添加表头注释,例如版权声明.作用.时间等信息提示,如果每次都手动编辑添加会大大消耗时间,所有我们可以利用快捷方法来节省时间,一种是手动在家 ...

  8. Image Processing and Analysis_21_Scale Space:Feature Detection with Automatic Scale Selection——1998

    此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...

  9. What Linux bind mounts are really doing

    Lots of Unixes have some form of 'loopback' mounts, where you can mount a bit of an existing filesys ...

  10. 什么是领域模型(domain model)?贫血模型(anaemic domain model)和充血模型(rich domain model)有什么区别

    领域模型是领域内的概念类或现实世界中对象的可视化表示,又称为概念模型或分析对象模型,它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系. 贫血模型是指使用的领域对象中只有s ...