这篇文章已经废弃。

实际开发中,打印信息只会用日志框架(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. 时间格式_java

    @Test public void testDate(){ Date date=new Date(); System.out.println(date); /*日期格式*/ DateFormat df ...

  2. javascript 垃圾回收机制和内存管理

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 垃圾回收机制的原理是找到不再被使用的变量,然后释放其占用的内存,但这个过程不是时时的,因为其开销比较大,所 ...

  3. (五)springmvc之获取表单提交的数据

    8.1:使用Request <form method="post" id="form1" action="<%=request.getCo ...

  4. 图像识别领域的一些code

    图像识别领域的一些code 转自:http://blog.163.com/pz124578@126/blog/static/23522694201343110495537/ ps:里面的一些方法都是目 ...

  5. java 传入用户名和密码并自动提交表单实现登录到其他系统

    不用单点登录,模拟远程项目的登录页面表单,在访问这个页面的时候自动提交表单到此项目的登录action,就可以实现登录到其他系统. ssh框架项目 1.以下是本地系统的action代码: import ...

  6. Centos7 配置 svn服务端

    转载至:Linux(阿里云Centos7)环境下搭建svn服务器以及权限配置详细步骤 本篇文章主要介绍在CentOS7中采用yum安装方式.优点:简单,一键安装,不用手动配置环境变量等.缺点:安装位置 ...

  7. CentOS7安装CDH 第六章:CDH的管理-CDH5.12

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  8. Matplotlib介绍

    目录 一.    Matplotlib介绍    1 二.    初级绘制    1 1.    绘图简介    1 2.    在上面的过程中,主要就是下面三个元素:    1 三.    2D各种 ...

  9. Scyther 形式化分析工具资料整理(三)

    1.作者Cas Cremers在做TLS1.3的时候我么发现并没有使用Scyther 形式化丰分析工具对其进行分析,而是使用了 The Tamarin .作者建立了TLS.13的模型. 那么我的目标是 ...

  10. LeetCode--链表

    1.使用常量空间复杂度在O(n log n)时间内对链表进行排序. 思路: 因为题目要求复杂度为O(nlogn),故可以考虑归并排序的思想. 归并排序的一般步骤为: 1)将待排序数组(链表)取中点并一 ...