自己写的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中,我们可以使用JavaBean模式来创建Entity类,包括属性(字段)和getter、setter方法。这个自动生成工具能够根据数据库表结构,自动生成对应的Entity类,包括注解(如`@Entity`、`@Table`等),以及各个字段...
Java实体类(entity)是Java开发中非常重要的一部分,它是Java中的O/R Mapping映射,即数据库中的一个表映射成对应的一个Java类。在Java开发中,定义实体类的目的是为了将数据库中的表映射到Java类中,使得开发者...
在Java编程领域,"Entity"通常指的是业务对象或者数据库中的表对应的类,是Java持久化技术的核心概念之一。本文将深入探讨Java实体(Entity)在Java注解(Annotation)环境下的应用,以及如何通过注解实现实体关系...
用java写的创建数据库表对应java model类
Java自动生成entity、dao、service、controller代码
Java 实体类字段自定义-数据库字段和程序实体类属性不一致解决方案 Java 实体类字段自定义是指在 Java 开发中,实体类的字段与数据库表的字段不一致的问题。这种情况下,需要实现实体类字段的自定义,以便与数据库...
根据表结构字段生成实体类,private int? keyId; public int? KeyId{get{return keyId;} set{keyId=value;}}
Java 后台开发中 Model 与 Entity 的区别说明 在 Java 后台开发中,Model 和 Entity 是两个常见的概念,但它们之间的区别却经常被忽视或混淆。在本文中,我们将深入探讨 Model 和 Entity 的概念、区别和使用场景。 ...
根据DDL获取基本的JAVA 实体类 复制DDL create table开始部分,点击获取即可
1. **Java实体类(Entity)**:实体类是Java程序中的对象,通常代表数据库中的一个表。MyBatis代码生成器可以根据数据库表的结构自动生成对应的实体类,包括属性(字段)和getter/setter方法,这样开发人员无需手动...
Java实体类(Entity Class)作为数据模型的表示,与数据库中的表进行映射,使得开发者能够更方便地操作数据库。本主题主要讲解如何利用工具或自定义脚本将MySQL数据表自动生成对应的Java实体类,提高开发效率。 ...
2. **实体类(Entity)**: 在Java应用中,实体类通常代表数据库中的表,用于封装业务数据。每个属性对应表的列,而属性的getter和setter方法则用于读写这些数据。在MyBatis中,实体类是连接Java对象和数据库记录的...
Mybatis Generator是一款强大的工具,它能够自动生成Java实体类(Entity)、Mapper接口和XML配置文件,极大地提高了开发效率。在"Maven"环境下,我们可以轻松地集成这个插件,实现自动化代码生成,尤其对于处理带有...
在Cesium这个强大的3D地球可视化库中,实体类(Entity)是其核心概念之一,用于表示场景中的各种对象,如点、线、多边形、模型等。本主题将深入探讨如何在Cesium中利用Entity类创建不同的实例对象,并实现点击事件...
1. 创建Controller:在Spring MVC中,创建一个控制器类,声明一个处理请求的方法,该方法的返回类型为ResponseEntity。 2. 处理请求:在控制器方法中,根据请求参数处理业务逻辑,然后构建一个ResponseEntity实例,...
通常,这会涉及到创建一个解析器类,逐行读取DXF文件,根据DXF的语法解析各个部分。 1. **解析过程**: - 文件头部:读取文件的版本信息和其他设置。 - 图层定义:解析图层的颜色、线型、线宽等属性。 - 图形...
在Java开发中,Entity(实体)和DAO(数据访问对象)层是常见的设计模式,用于构建数据驱动的应用程序。这两个层分别负责业务对象的定义和数据操作。在本主题中,我们将深入探讨如何通过自动化工具生成这些层,以...
1. `MultipartEntityBuilder`: 这是一个用于构建MIME多部分实体的工具类。你可以通过添加字段和文件,设置编码、边界等属性来构建复杂的HTTP请求体。 2. `MultipartEntity`: 表示一个MIME多部分实体,它可以包含多...
在Java开发中,数据库操作是不可或缺的一部分,而实体类(Entity)是ORM(对象关系映射)中的关键概念,它代表了数据库中的一个表。`java生成mysql实体类`这个主题涉及到了如何利用Java程序自动化地从MySQL数据库中...