`
小小黑咖啡
  • 浏览: 11341 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

读完部分effective java 自己写的类Entity

阅读更多
自己写的Entity类,有四个属性,int,char,Sting,double,用了构造器方法,可以四个参数都有,也可以之后几个,但int是必须的。类还实现了comparable接口,重写了compareTo,equals,hashCode三个方法,这是我能想到的比较OK的类。

compareTo的比较方法是按int>char>String>double的顺序
equals方法中规中矩,比较而已
hashCode用的书中的方法,待思考
package com.util;

public class Entity implements Comparable{

	private final int i;
	private final char c;
	private final String s;
	private final double d;
	
	public static class Builder {
		private final int i;
		private char c;
		private String s;
		private double d;
		public Builder(int i) {
			this.i = i;
		}
		public Builder setC(char c) {
			this.c = c;
			return this;
		}
		public Builder setS(String s) {
			this.s = s;
			return this;
		}
		public Builder setD(double d) {
			this.d = d;
			return this;
		}
		public Entity build() {
			return new Entity(this);
		}
	}
	private Entity(Builder b) {
		this.c = b.c;
		this.d = b.d;
		this.s = b.s;
		this.i = b.i;
	}
	
	@Override
	public int compareTo(Object o) {
		if(this == o) 
			return 0;
		if(!(o instanceof Entity))
			throw new IllegalArgumentException("Cannot compare Pair with "  
	               + o.getClass().getName());	
		Entity e = (Entity)o;
		if(i == e.i) {
			if(c == e.c) {
				if((s == null && e.s == null) || (s != null && s.compareTo(e.s) == 0)) {
					if(Double.compare(d, e.d) == 0) {
						return 0;
					} else {
						return Double.compare(d, e.d);
					}
				} else {
					if( s == null && e.s != null) return -1;
					else if( e.s == null && s != null) return 1;
					else return s.compareTo(e.s);
				}
			} else {
				return c - e.c > 0 ? 1 : -1;
			}
		} else {
			return i - e.i > 0 ? 1 : -1;
		}
	}

	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Entity)) return false;
		Entity e = (Entity)obj;
		if(this.i == e.i)
			if(this.c == e.c) 
				if( (s == null && e.s == null) || this.s.equals(e.s))
					if(this.d == e.d) 
						return true;
		return false;
	}

	@Override
	public String toString() {
		return "[int = " + i + ",char = " + c + ",String = " + s + ", double = " + d + "]";
	}
	@Override
	public int hashCode() {
		int result = 17;
		result = 31*result + this.i;
		result = 31*result + (int)this.c;
		result = 31*result + (int)Math.round(d);
		result = 31*result + (int)s.charAt(0);
		return result ;
	}

	
}

还有测试代码:
package com.util;

import junit.framework.Assert;

import org.junit.Test;


public class TestEntity {

	@Test
	public void testEquals() {
		Entity e1 = new Entity.Builder(3).setC('b').build();
		Entity e2 = new Entity.Builder(3).setC('b').build();
		Entity e3 = new Entity.Builder(3).build();
		Integer i = Integer.valueOf("3");
		Assert.assertEquals(e1.equals(e2), true);
		Assert.assertEquals(e1.equals(e3), false);
		Assert.assertEquals(e3.equals(i), false);
	}
	@Test
	public void testCompareTo() {
		Entity e1 = new Entity.Builder(3).setC('b').build();
		Entity e2 = new Entity.Builder(3).setC('b').build();
		Entity e3 = new Entity.Builder(3).setC('a').build();
		Entity e4 = new Entity.Builder(3).setC('b').setS("asd").build();
		
		Assert.assertEquals(e1.compareTo(e1), 0);	
		Assert.assertEquals(e1.compareTo(e2), 0);
		Assert.assertEquals(e1.compareTo(e3), 1);
		Assert.assertEquals(e1.compareTo(e4), -1);
	}
	@Test(expected=IllegalArgumentException.class)
	public void testCompareTo2() {
		Entity e1 = new Entity.Builder(3).setC('b').build();
		Integer i = Integer.valueOf("3");
		Assert.assertEquals(e1.compareTo(i), 0);
	}	
}
分享到:
评论

相关推荐

    java 自动生成代码 entity,dao,service

    在Java中,我们可以使用JavaBean模式来创建Entity类,包括属性(字段)和getter、setter方法。这个自动生成工具能够根据数据库表结构,自动生成对应的Entity类,包括注解(如`@Entity`、`@Table`等),以及各个字段...

    Java实体类(entity)作用说明

    Java实体类(entity)是Java开发中非常重要的一部分,它是Java中的O/R Mapping映射,即数据库中的一个表映射成对应的一个Java类。在Java开发中,定义实体类的目的是为了将数据库中的表映射到Java类中,使得开发者...

    java entity

    在Java编程领域,"Entity"通常指的是业务对象或者数据库中的表对应的类,是Java持久化技术的核心概念之一。本文将深入探讨Java实体(Entity)在Java注解(Annotation)环境下的应用,以及如何通过注解实现实体关系...

    JAVA mysql Entity创建工具

    用java写的创建数据库表对应java model类

    Java自动生成entity、dao、service、controller代码

    Java自动生成entity、dao、service、controller代码

    java实体类字段自定义-数据库字段和程序实体类属性不一致解决方案.docx

    Java 实体类字段自定义-数据库字段和程序实体类属性不一致解决方案 Java 实体类字段自定义是指在 Java 开发中,实体类的字段与数据库表的字段不一致的问题。这种情况下,需要实现实体类字段的自定义,以便与数据库...

    codesmith 实体类Entity模板

    根据表结构字段生成实体类,private int? keyId; public int? KeyId{get{return keyId;} set{keyId=value;}}

    java 后台开发中model与entity(实体类)的区别说明

    Java 后台开发中 Model 与 Entity 的区别说明 在 Java 后台开发中,Model 和 Entity 是两个常见的概念,但它们之间的区别却经常被忽视或混淆。在本文中,我们将深入探讨 Model 和 Entity 的概念、区别和使用场景。 ...

    由DDL获取JAVA实体类

    根据DDL获取基本的JAVA 实体类 复制DDL create table开始部分,点击获取即可

    mybatis代码生成器,Java实体类生成器

    1. **Java实体类(Entity)**:实体类是Java程序中的对象,通常代表数据库中的一个表。MyBatis代码生成器可以根据数据库表的结构自动生成对应的实体类,包括属性(字段)和getter/setter方法,这样开发人员无需手动...

    MySQL表自动生成Java实体类

    Java实体类(Entity Class)作为数据模型的表示,与数据库中的表进行映射,使得开发者能够更方便地操作数据库。本主题主要讲解如何利用工具或自定义脚本将MySQL数据表自动生成对应的Java实体类,提高开发效率。 ...

    生成entity和mybatis映射文件

    2. **实体类(Entity)**: 在Java应用中,实体类通常代表数据库中的表,用于封装业务数据。每个属性对应表的列,而属性的getter和setter方法则用于读写这些数据。在MyBatis中,实体类是连接Java对象和数据库记录的...

    Mybatis Generator自动生成JavaEntity带中文注释和注解[Maven]工程

    Mybatis Generator是一款强大的工具,它能够自动生成Java实体类(Entity)、Mapper接口和XML配置文件,极大地提高了开发效率。在"Maven"环境下,我们可以轻松地集成这个插件,实现自动化代码生成,尤其对于处理带有...

    Cesium 中 实体类entity多种实例对象-实现点击事件

    在Cesium这个强大的3D地球可视化库中,实体类(Entity)是其核心概念之一,用于表示场景中的各种对象,如点、线、多边形、模型等。本主题将深入探讨如何在Cesium中利用Entity类创建不同的实例对象,并实现点击事件...

    springMVC-HttpEntity(ResponseEntity)demo

    1. 创建Controller:在Spring MVC中,创建一个控制器类,声明一个处理请求的方法,该方法的返回类型为ResponseEntity。 2. 处理请求:在控制器方法中,根据请求参数处理业务逻辑,然后构建一个ResponseEntity实例,...

    java dxf读写

    通常,这会涉及到创建一个解析器类,逐行读取DXF文件,根据DXF的语法解析各个部分。 1. **解析过程**: - 文件头部:读取文件的版本信息和其他设置。 - 图层定义:解析图层的颜色、线型、线宽等属性。 - 图形...

    自动生成entity和dao层

    在Java开发中,Entity(实体)和DAO(数据访问对象)层是常见的设计模式,用于构建数据驱动的应用程序。这两个层分别负责业务对象的定义和数据操作。在本主题中,我们将深入探讨如何通过自动化工具生成这些层,以...

    org.apache.http.entity.mime

    1. `MultipartEntityBuilder`: 这是一个用于构建MIME多部分实体的工具类。你可以通过添加字段和文件,设置编码、边界等属性来构建复杂的HTTP请求体。 2. `MultipartEntity`: 表示一个MIME多部分实体,它可以包含多...

    java生成mysql实体类

    在Java开发中,数据库操作是不可或缺的一部分,而实体类(Entity)是ORM(对象关系映射)中的关键概念,它代表了数据库中的一个表。`java生成mysql实体类`这个主题涉及到了如何利用Java程序自动化地从MySQL数据库中...

Global site tag (gtag.js) - Google Analytics