这篇文章已经废弃。

实际开发中,打印信息只会用日志框架(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”。

最新文章

  1. Java关键字 ClassName.this(类名.this)的理解
  2. AngularJS Select(选择框)
  3. Faster-RCNN 解析
  4. Can&#39;t connect to local MySQL server through socket &#39;/var/run/mysqld/mysqld.sock&#39;解决
  5. 各种边缘检测算子特点比较(canny)
  6. block的内部实现
  7. jQuery获取浏览器URL链接的值
  8. memcached学习笔记4--memcache扩展操作memcached
  9. 从问题看本质:socket到底是什么(问答式)? .
  10. java list中的对象,按对象某属性排序
  11. 将java应用程序打包成可执行文件
  12. String的那点小事儿
  13. 发现一个时隐时现的bug!
  14. 给定N个整数集合是否存在两个其和刚好为指定常数的元素
  15. 解决oracle数据库连接不上的问题
  16. ASP.NET Core使用HttpClient的同步和异步请求
  17. Python多线程的运行及time.sleep()的应用
  18. 原生JS获取DOM 节点到浏览器顶部的距离或者左侧的距离
  19. SpringBoot从入门到逆天(1)
  20. Swift基础语法之变量函数

热门文章

  1. CMake入门-03-还是HelloWorld
  2. 面试经典算法:快速排序Golang实现
  3. (四)Spring Boot之配置文件-多环境配置
  4. SAP WebIDE里UI5应用的隐藏文件project.json
  5. 定义Java类实现字节流转字符流
  6. gitlab安装教程 正在修炼的西瓜君
  7. Python更改pip源
  8. docker安装redis并以配置文件方式启动
  9. 本地开发的jar包放到本地maven仓库
  10. 用正则表达式处理一个复杂字符串(类似json格式)