推荐2在编码过程中的减小不仅编码的量,挺easy工具上手:可适用Java反思与单探头Assert。

1 Mirror:Java反思

简单介绍

官网:http://projetos.vidageek.net/mirror/mirror/

将Java原生API提供的面向命令的语法:Class.getField/getDeclaredFields/getMethod()/getAnnotation之类的调用简化为DSL语法。訪问field/method/anntation的代码量大幅降低,更重要的是easy理解了,能够说是一眼看穿:

官网的样例,改动field的值,Java SDK的API编码:

//"target" is the object containing the field whose value you want to set.
Field toSet = null;
for (Field f : target.getClass().getDeclaredFields()) {
//Get all fields DECLARED inside the target object class
if (f.getName().equals("field")) {
toSet = f;
}
}
if (toSet != null && (toSet.getModifiers() & Modifier.STATIC) == 0) {
toSet.setAccessible(true);
toSet.set(target, value);
}

基于Mirror的API

new Mirror().on(target).set().field(fieldName).withValue(value);

这样才干愉快的编码。!

特点

Mirror常规模式下提供:

* Field的读取、改动

* Method的读取、调用

* Constructor的读取、基于Constructor创建对象

* 标注于Class上的Annatation的读取

和cglib-nodep组合模式下能够创建Java Proxy,一句话搞定:

SomeClass proxy = new Mirror().proxify(SomeClass.class)
.interceptingWith(new YourCustomMethodInterceptor());

2 AssertJ:更易用的单測Assert

在遇到AssertJ之前我用过JUnit和Hamcrest的Assert API,Hamcrest的接口强大可是那么不easy理解。

JUnit的API:麻绳提豆腐-别提了。

AssertJ支持对象指定Feild、方法返回值的断言,

// common assertions
assertThat(frodo.getName()).isEqualTo("Frodo");
assertThat(frodo).isNotEqualTo(sauron)
.isIn(fellowshipOfTheRing); // String specific assertions
assertThat(frodo.getName()).startsWith("Fro")
.endsWith("do")
.isEqualToIgnoringCase("frodo");

并且对集合对象的遍历支持的很好:遍历的时候能够自己定义过滤条件filters

// collection specific assertions
List<TolkienCharacter> fellowshipOfTheRing = ...;
assertThat(fellowshipOfTheRing).hasSize(9)
.contains(frodo, sam)
.doesNotContain(sauron);

另一个有意思的Assert特性是continue on erros:soft-assertions

具体的使用说明见:joel-costigliola.github.io/assertj/assertj-core-features-highlight.html



引入maven依赖的时候,要注意JDK版本号:

<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<!-- use 3.0.0 for Java 8 projects -->
<!-- 2.0.0 required Java 7 -->
<!-- 1.7.1 for Java 6 -->
<version>1.7.1</version>
<scope>test</scope>
</dependency>

高级版API提供Assert为Guava、Joda-Time、Neo4j、Swing的对象进行API级别推断。

版权声明:本文博主原创文章。博客,未经同意不得转载。

推荐2一个在Java编码过程中得心应手的工具的更多相关文章

  1. 使用ffmpeg视频编码过程中踩的一个坑

           今天说说使用ffmpeg在写视频编码程序中踩的一个坑,这个坑让我花了好多时间,回头想想,非常多时候一旦思维定势真的挺难突破的.以下是不对的编码结果:                   ...

  2. Java 执行过程中的内存模型

    一.前言 本文的主要工作:尝试以时间顺序追踪一遍 Java 执行的整个过程,以及展示 JVM 中内存模型的相应变化. 本文的主要目的:希望能够通过 Java 执行过程的冰山一角,增进对编程语言工作原理 ...

  3. JAVA安装过程中出现的“javac不是内部或外部指令”的解决方法

    近来重新安装了JAVA,安装过程中出现问题,网上找到解决办法,汇总发布. 解决流程: 1.确定自己的环境变量设置没问题,没有出现遗漏 : . 等情况 (具体环境变量设置百度) 2.环境变量设置后 ,d ...

  4. java编译过程中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError

    原因:这个问题确实是由较高版本的JDK编译的java class文件试图在较低版本的JVM上运行产生的错误. 以下是报错截图: 1.解决措施就是保证jvm(java命令)和jdk(javac命令)版本 ...

  5. 使用Eclipse开发Java Web过程中Debug调试的使用方法

    里介绍的是在Eclipse中的Debug调试. 首先右击项目选择Debug As -- Debug on Server 或者点击Server面板的小昆虫图标,启动Debug模式. 运行web项目,进行 ...

  6. java初始化过程中成员变量

    package day01; class Base{ int j; //1.j=0 Base(){ add(1); //2.调用子类add()方法 System.out.println(j); //4 ...

  7. pip:带你认识一个 Python 开发工作流程中的重要工具

    摘要:许多Python项目使用pip包管理器来管理它们的依赖项.它包含在Python安装程序中,是Python中依赖项管理的重要工具. 本文分享自华为云社区<使用Python的pip管理项目的依 ...

  8. 虚拟机win7 安装过程中遇到虚拟工具安装失败

    如果遇见这样的问题 倘若你用的是这样的镜像:cn_windows_7_enterprise_x64_dvd_x15-70741.iso 换镜像源.换镜像源.换镜像源! 换成带sp1的iso镜像:cn_ ...

  9. Java 编码规范(转)

    本文转自:http://www.javaranger.com/archives/390 文章总结出了java编码过程中的一些规范,以便参考. 1.合理组织代码层次,分层清晰:controller.lo ...

随机推荐

  1. HDU 4998 Rotate

    题意: n次旋转  每次平面绕ai点旋转pi弧度  问  最后状态相当于初始状态绕A点旋转P弧度  A和P是多少 思路: 如果初始X点的最后状态为X'点  则圆心一定在X和X'连线的垂直平分线上  那 ...

  2. hdu(预处理+线段树)

    给n个数,m个询问, 问任意区间内与其它数互质的数有多少个 比如3个数1 2 4,询问[1,3] 那么答案是1 千万要记住,这样的题目,如果你不转变下,使劲往线段树想(虽然转变之后,也说要用到线段树, ...

  3. 基于karma和jasmine的Angularjs 单元测试

    Angularjs 基于karma和jasmine的单元测试 目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller     3.1 测试controller中变量值是否 ...

  4. Eclipse+Maven命令创建webapp项目<三>

    1.使用maven命令:mvn archetype:create -DgroupId=xxxxx -DartifactId=web-sample -DarchetypeArtifactId=maven ...

  5. Codeforces Round #256 (Div. 2) A. Rewards

    A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  6. iOS8推送消息的回复处理速度

    iOS8我们有一个新的通知中心,我们有一个新的通报机制.当在屏幕的顶部仅需要接收一个推拉向下,你可以看到高速接口,天赋并不需要输入应用程序的操作.锁定屏幕,用于高速处理可以推动项目. 推送信息,再次提 ...

  7. 使用ThinkPHP框架高速发展网站(多图)

    使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助 ...

  8. js“分享到”侧边框伸缩实现

    思路: 1,临界值是 -150 和 0 如果大于临界值,就要隐藏 2,隐藏:速度为负 显示:速度为正 3,如果与临界值相等,就清空定时器 否则,就运动 ------------------------ ...

  9. java 线程、线程池基本应用演示样例代码回想

    java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...

  10. ViewRootImpl和WindowManagerService笔记

    1.每个窗体的ViewRootImpl都有一个mWindowAttributes窗体属性,该属性在WindowManagerGlobal.updateViewLayout()->ViewRoot ...