推荐2个在Java编码过程好用的工具

推荐2个在编码过程中既能减少编码量,又非常容易上手的工具类:适用于Java反射和单测Assert。

1 Mirror:Java反射

简介

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

将Java原生API提供的面向命令的语法:Class.getField/getDeclaredFields/getMethod()/getAnnotation之类的调用简化为DSL语法,访问field/method/anntation的代码量大幅减少,更重要的是容易理解了,可以说是一眼看穿:

官网的例子,修改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的接口强大但是那么不容易理解。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级别判断。

时间: 2024-11-05 13:25:51

推荐2个在Java编码过程好用的工具的相关文章

Java 编码规范(转)

本文转自:http://www.javaranger.com/archives/390 文章总结出了java编码过程中的一些规范,以便参考. 1.合理组织代码层次,分层清晰:controller.logic.dao.对第三方接口(包括公司接口)的调用:各层要继承基类或实现接口 2.先定义方法原型,再实现方法体 3.理想的方法,是不可拆分的.原子的一个逻辑实现,具有一个明确的职责 4.方法体不超过70行,类体不超过500行 5.类名称.变量名称.方法名称,遵循简单明确,知名见义原则.建议不带数字,

学习 JAVA,有什么书籍推荐?学习的方法和过程是怎样的?

原创:一只有梦想的鱼 原文链接:https://www.cnblogs.com/zhanlaoshi/p/10845765.html 本文内容比较长,主要包含下面几部分内容: 学习路线以及方法推荐 书单推荐 教程推荐 推荐一个学习中常看的仓库 学习/编程好习惯 面试必知 打开UC浏览器 查看更多精彩图片 学习路线以及方法推荐对于学习路线的话,我说一条我比较推荐的,我相信照着这条学习路线来你的学习效率会非常高.下面提到的书籍以及相关学习视频都答主已经整理好,文末有免费获取方式.很多朋友这几天领取了

java中文乱码解决之道(七)-----JSP页面编码过程

我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="GBK" %> 在上面代码中有两个地方存在编码:pageEncoding.contentType的charset.其中pageEnco

Java 编码与字符

一.字符集介绍 ANSI:American National Standards Institute.中文:美国国家标准学会 不同国家的和地区为此制定了不同标准,由此产生了 GB2312.GBK.Big5.Shift_JIS 等各自的编码标准.这些使用 1 至 4 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码.在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码:在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码. 不同 ANSI 编

java编码规范及优化总结

一.java概述 1991 年Sun公司的James Gosling(詹姆斯·高斯林)等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器.1994年将Oak语言更名为Java. 二.Java的三种技术架构 J2EE:Java PlatformEnterprise Edition,开发企业环境下的应用程序,主要针对web程序开发: J2SE:Java PlatformStandard Edition,完成桌面应用程序的开发,是其它两者的基础: J2ME:Jav

Java编码规范(转)

1. Java 命名约定 除了以下几个特例之外,命名时应始终采用完整的英文描述符.此外,一般应采用小写字母,但类名.接口名以及任何非初始单词的第一个字母要大写. 1.1 一般概念 * 尽量使用完整的英文描述符 * 采用适用于相关领域的术语 * 采用大小写混合使名字可读 * 尽量少用缩写,但如果用了,要明智地使用,且在整个工程中统一 * 避免使用长的名字(小于 15 个字母是个好主意) * 避免使用类似的名字,或者仅仅是大小写不同的名字 * 避免使用下划线(除静态常量等) 1.2 示范 * 包(P

标准的Java编码规范手册

编码规范体现出一个开发者的基本素质,良好的编码规范可以提高团队编码的效率,避免很多不必要的问题.今天分享一个标准的Java编码规范给大家,希望对于大家今后的开发工作带来帮助. 编码规范的意义 在项目开发维护中,编码规范作为开发规范的一个组成部分,是十分重要和必须的,它不仅仅是为了提高开发效率,也有利于降低后期维护开发的成本.编码规范的根本目的就是要让不仅代码可以一目了然,也可以很容易的理解开发人员所编写的代码程的用途和意义.由此,用来减少项目中因为开发维护人员的更替或由于长时间不维护造成的记忆模

java编码规范

右括号") "与其后面的关键字之间,关键字与其后面的左括号"("或"{"之间,以及"}"与"{"之间,要以一个空格隔开:除". "外,所有二元操作符的前.后要加空格:在逗号后边加一个空格. 说明: 一个紧跟着括号的关键词应该被空格分开: 空白应该位于参数列表中逗号的后面: 所有的二元运算符,除了".",应该使用空格将之与操作数分开.一元操作符和操作数之间不应该加空格,

java编码问题

工作中经常遇到java编码问题,由于缺乏研究,总是无法给出确切的答案,这个周末在网上查了一些资料,在此做些汇总. 问题一:在java中读取文件时应该采用什么编码? Java读取文件的方式总体可以分为两类:按字节读取和按字符读取.按字节读取就是采用InputStream.read()方法来读取字节,然后保存到一个byte[]数组中,最后经常用new String(byte[]);把字节数组转换成String.在最后一步隐藏了一个编码的细节,new String(byte[]);会使用操作系统默认的