摘要:
在Java程序中,可以通过给System.in和System.out重新赋值来重定向标准输入和输出。 在单元测试的时候,为了对涉及到标准输入和输出的程序进行测试,常用的做法是将标准输入和输出重定向到文件,这样就可以用程序实现自动化的比对。但是这样做会有文件读取的开销,可能会降低单元测试的运行效率。 阅读全文
摘要:
大家都知道,Java在创建异常对象时会生成调用栈信息,这样当异常抛出时,开发者就能从报错信息中看到异常抛出的路径,非常有利于定位问题。 但是,调用栈信息的生成是一件非常耗时的工作。在某些特殊情况下,我们需要用异常来实现控制流跳转(比如从多层递归中跳出),此时不需要生成调用栈信息。在这种情况下,关闭异 阅读全文
摘要:
前言 Java8新增的Stream API是一个强大的特性,它可以简化集合中的常用操作,包括过滤、映射、分组等。下面就来实现一个简易版的Stream。 从表面上看,流似乎和列表很接近,但实际上它们有着本质的区别。 列表是多个元素的容器,当列表被创建出来时,它里面的每个元素也已经被创建出来了。 流是一 阅读全文
摘要:
Java 1.8之后,新增了一个叫做SerializedLambda的类,它用来保存Lambda表达式序列化之后的数据,通过SerializedLambda可以获取Lambda表达式的各种元信息,包括参数类型、返回值类型等。 下面的代码可以获取一个Lambda表达式对应的SerializedLamb 阅读全文
摘要:
假设有以下接口: public interface Factory<T> { T create(); } 这是一个泛型接口,在实现Factory的时候需要指定泛型参数: public class StringFactory implements Factory<String> { @Override 阅读全文
摘要:
这篇文章介绍如何用Parser Combinator实现一个简单的正则表达式引擎。 Cursor Cursor封装了字符串的状态,表示一个光标位置。光标位置只能向后移动,可以方便地获取光标指向的字符,以及判断是否到达字符串末尾。 public class Cursor { private final 阅读全文
摘要:
示例工程 引入Maven依赖: <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.5</version> </ 阅读全文
摘要:
工程搭建 Maven依赖: <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.5</version> </de 阅读全文
摘要:
策略模式的简单实现 首先定义一个Strategy接口来表示一个策略: public interface Strategy { String flag(); void process(); } 其中flag方法返回当前策略的唯一标识,process则是该策略的具体执行逻辑。 下面是Strategy接口 阅读全文
摘要:
ByxOrm是一个模仿MyBatis设计的轻量级ORM框架,支持以下特性: 使用动态代理生成Dao接口的实现类 使用注解配置Dao方法对应的SQL语句 使用注解配置实体类字段与数据库列名的对应关系 动态查询和动态更新 项目地址:https://github.com/byx2000/byx-orm M 阅读全文