下面这个类,真不好理解?
为什么要继承这么多的方法?
有什么用呢?
/**
* 在数据库表中使用一个varchar类型的列保存枚举常量的name值。<br>
* 在配置时,需要指定一个属性:enumClassName 。用于指定所对应的枚举类型的全限定名。<br>
* 如果是内部类,就用$。如:cn.itcast.bbs.domain.User$Sex(假设Sex是在User中定义的静态内部类)。
*
* <pre>
* 示例:
* <typedef name="genderType" class="cn.itcast.bbs.domain.hibernate.HibernateGenericEnumType">
* <param name="enumClassName">cn.itcast.bbs.domain.Gender</param>
* </typedef>
* </pre>
* @author tyg
*
*/
@SuppressWarnings("unchecked")
public class HibernateGenericEnumType2 implements UserType, ParameterizedType { public HibernateGenericEnumType2(){
System.out.println("HibernateGenericEnumType2()&&&&&&&&&&&&&");
}
protected Class<? extends Enum> enumClass;
protected int sqlType = Types.VARCHAR; protected Class<? extends Enum> getEnumClass() {
System.out.println("HibernateGenericEnumType2()&&&&&&&getEnumClass():"+this.enumClass);
return this.enumClass;
} public void setParameterValues(Properties parameters) {
String enumClassName = parameters.getProperty("enumClassName");
System.out.println("HibernateGenericEnumType2()&&&&&&setParameterValues:"+enumClassName);
try {
this.enumClass = (Class<Enum>) Class.forName(enumClassName);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException("指定了一个不正确的枚举类型【" + enumClassName + "】", e);
}
} /** 用于设定nullSafeGet所返回的数据的类型。即我们的自定义的数据类型。 */
public Class<? extends Enum> returnedClass() {
System.out.println("HibernateGenericEnumType2()&&&&&&returnedClass():"+getEnumClass());
return getEnumClass();
} /** 对应的数据库表中列的类型,可选值在java.sql.Types中定义 */
public int[] sqlTypes() {
System.out.println("HibernateGenericEnumType2()&&&&&&sqlTypes():"+new int[] { sqlType });
return new int[] { sqlType };
} /**
* 在PreparedStatement执行之前会调用本方法。 一般都是在本方法中将自定义类型数据转换成数据库中的数据类型。 要处理值为null时的情况。 其中的value表示的是要写入的值;index表示的是在statement的参数中的索引。
*/
public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
System.out.println("HibernateGenericEnumType2()&&&&&&nullSafeSet:");
if (value == null) {
st.setNull(index, sqlType);
} else {
st.setString(index, ((Enum) value).name());
}
} /**
* 从ResultSet中取出相应的值并转(生)成与属性类型对应的类型, 要处理当值为null时的情况
*/
public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
System.out.println("HibernateGenericEnumType2()&&&&&&nullSafeGet(ResultSet:");
String value = rs.getString(names[0]);
if (rs.wasNull()) {
return null;
} return Enum.valueOf(getEnumClass(), value);
} /** 对象是否可变(例如我们这里的Sex不可变) */
public boolean isMutable() {
System.out.println("HibernateGenericEnumType2()&&&&&&isMutable() :");
return false;
} /** 要求返回一个自定义类型的完全复制对象,如果此对象是不可变的(如枚举)或null,可以直接返回value参数 */
public Object deepCopy(Object value) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&deepCopy");
return value;
} /**
* 对对象调用merge方法时对这个属性的拷贝, 如果是不可变对象(如枚举)或null,应直接返回第一个参数值original
*/
public Object replace(Object original, Object target, Object owner) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&replace");
return original;
} public boolean equals(Object x, Object y) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&equals(");
if (x == null) {
return false;
}
return x.equals(y);
} public int hashCode(Object x) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&hashCode(");
return x.hashCode();
} /** 把这个数据放入缓存时要调用的方法 */
public Object assemble(Serializable cached, Object owner) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&assemble(");
return cached;
} /** 从缓存中取这个对象数据时要调用的方法 */
public Serializable disassemble(Object value) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&disassemble(");
return (Serializable) value;
}}
为什么要继承这么多的方法?
有什么用呢?
/**
* 在数据库表中使用一个varchar类型的列保存枚举常量的name值。<br>
* 在配置时,需要指定一个属性:enumClassName 。用于指定所对应的枚举类型的全限定名。<br>
* 如果是内部类,就用$。如:cn.itcast.bbs.domain.User$Sex(假设Sex是在User中定义的静态内部类)。
*
* <pre>
* 示例:
* <typedef name="genderType" class="cn.itcast.bbs.domain.hibernate.HibernateGenericEnumType">
* <param name="enumClassName">cn.itcast.bbs.domain.Gender</param>
* </typedef>
* </pre>
* @author tyg
*
*/
@SuppressWarnings("unchecked")
public class HibernateGenericEnumType2 implements UserType, ParameterizedType { public HibernateGenericEnumType2(){
System.out.println("HibernateGenericEnumType2()&&&&&&&&&&&&&");
}
protected Class<? extends Enum> enumClass;
protected int sqlType = Types.VARCHAR; protected Class<? extends Enum> getEnumClass() {
System.out.println("HibernateGenericEnumType2()&&&&&&&getEnumClass():"+this.enumClass);
return this.enumClass;
} public void setParameterValues(Properties parameters) {
String enumClassName = parameters.getProperty("enumClassName");
System.out.println("HibernateGenericEnumType2()&&&&&&setParameterValues:"+enumClassName);
try {
this.enumClass = (Class<Enum>) Class.forName(enumClassName);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException("指定了一个不正确的枚举类型【" + enumClassName + "】", e);
}
} /** 用于设定nullSafeGet所返回的数据的类型。即我们的自定义的数据类型。 */
public Class<? extends Enum> returnedClass() {
System.out.println("HibernateGenericEnumType2()&&&&&&returnedClass():"+getEnumClass());
return getEnumClass();
} /** 对应的数据库表中列的类型,可选值在java.sql.Types中定义 */
public int[] sqlTypes() {
System.out.println("HibernateGenericEnumType2()&&&&&&sqlTypes():"+new int[] { sqlType });
return new int[] { sqlType };
} /**
* 在PreparedStatement执行之前会调用本方法。 一般都是在本方法中将自定义类型数据转换成数据库中的数据类型。 要处理值为null时的情况。 其中的value表示的是要写入的值;index表示的是在statement的参数中的索引。
*/
public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
System.out.println("HibernateGenericEnumType2()&&&&&&nullSafeSet:");
if (value == null) {
st.setNull(index, sqlType);
} else {
st.setString(index, ((Enum) value).name());
}
} /**
* 从ResultSet中取出相应的值并转(生)成与属性类型对应的类型, 要处理当值为null时的情况
*/
public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
System.out.println("HibernateGenericEnumType2()&&&&&&nullSafeGet(ResultSet:");
String value = rs.getString(names[0]);
if (rs.wasNull()) {
return null;
} return Enum.valueOf(getEnumClass(), value);
} /** 对象是否可变(例如我们这里的Sex不可变) */
public boolean isMutable() {
System.out.println("HibernateGenericEnumType2()&&&&&&isMutable() :");
return false;
} /** 要求返回一个自定义类型的完全复制对象,如果此对象是不可变的(如枚举)或null,可以直接返回value参数 */
public Object deepCopy(Object value) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&deepCopy");
return value;
} /**
* 对对象调用merge方法时对这个属性的拷贝, 如果是不可变对象(如枚举)或null,应直接返回第一个参数值original
*/
public Object replace(Object original, Object target, Object owner) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&replace");
return original;
} public boolean equals(Object x, Object y) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&equals(");
if (x == null) {
return false;
}
return x.equals(y);
} public int hashCode(Object x) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&hashCode(");
return x.hashCode();
} /** 把这个数据放入缓存时要调用的方法 */
public Object assemble(Serializable cached, Object owner) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&assemble(");
return cached;
} /** 从缓存中取这个对象数据时要调用的方法 */
public Serializable disassemble(Object value) throws HibernateException {
System.out.println("HibernateGenericEnumType2()&&&&&&disassemble(");
return (Serializable) value;
}}
解决方案 »
- java内部类有什么缺点,会导致程序变得低效率么
- java string indexof out of range怎么办
- 怎么样将一个编译好的java类打成包使其能直接运行,给点源代码:
- java怎样开发类似QQ超炫的界面
- 求Tomcat在Eclipse3.1.2中的插件 tomcatPluginV3.zip
- 一个关于怎么结束流的问题
- 如何在application应用中找到一个xml配置文件相对路径,不想写绝对路径,给出代码好吗,帮帮我这个新手吧!!!100分球救!!
- 用swing做的一个gui,可以用键盘和按钮控制一个小球上下左右移动 但是用按钮控制以后,键盘就不能再控制了
- 高分求教java文件操作的问题!!
- BBS版块列表跳转问题?
- 一段问题代码,请求仙人指点下
- 请教,随机数问题
下面的为接口里的方法
继承只需要重写你需要用到的父类的方法,
而实现接口则是要实现接口内所有的方法。