论坛首页 入门技术论坛

Hibernate Bean的Equals方法重载问题

浏览 15517 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-05-27  
我三天两头被新手和隐藏 所以我决定以后不再写任何东西 习惯就好
0 请登录后投票
   发表时间:2009-05-27  
linliangyi2007 写道
靠这也叫新手帖!!
javaeye上有几个新手提这样的问题啊!!
提问题也要有层次好啵?动不动就评新手帖,无语!

嗯,投你一票良好 
6 请登录后投票
   发表时间:2009-05-27  
linliangyi2007 写道
jianfeng008cn 写道
KimShen 写道

Test有private Id字段


Test的id应该是public的吧


private 的,因为是在同一个类的内部,所以private可以直接引用



other 不是外面传进去的吗?怎么变成了同个类的内部了?
0 请登录后投票
   发表时间:2009-05-27  
jianfeng008cn 写道
linliangyi2007 写道
jianfeng008cn 写道
KimShen 写道

Test有private Id字段


Test的id应该是public的吧


private 的,因为是在同一个类的内部,所以private可以直接引用



other 不是外面传进去的吗?怎么变成了同个类的内部了?

这种情况下,private是没有问题地.
private:除了包含这个成员的类外,其他任何类都无法访问这个成员(说的是类,不是对象)
0 请登录后投票
   发表时间:2009-05-27   最后修改:2009-05-27
这个贴投新手帖很正常啊,要正视自己的水平,我就是新手。不过我自己投了良好~~~
0 请登录后投票
   发表时间:2009-05-27  
虽然我不会投楼主新手帖,但是楼主完全应该在发帖前多测试几下嘛。

这种情况,楼主只要在equals方法中打印几行,几个判断的结果很容易就能发现是哪一个判断返回false。至少到这一步你能知道是other.id不是你预期的结果。
1 请登录后投票
   发表时间:2009-05-27  
icewubin 写道
虽然我不会投楼主新手帖,但是楼主完全应该在发帖前多测试几下嘛。

这种情况,楼主只要在equals方法中打印几行,几个判断的结果很容易就能发现是哪一个判断返回false。至少到这一步你能知道是other.id不是你预期的结果。


首先 赞同

然后 我没积分所以没投了票不好意思
0 请登录后投票
   发表时间:2009-05-27  
package com.bobo;

public class TestMain {
public static void main(String[] args) {
new TestMain().test();
}
public void test() {
Parent p = new Son();
// 结果0
System.out.println(p.id);
Son s = (Son) p;
// 结果1
System.out.println(s.id);
/*
* 总结:
* 属性没@Override
* 属性是隐藏,引用是什么类型就调用什么熟悉,方法呵呵大家清楚
*/

}

class Parent {
private int id = 0;

public int getId() {
return this.id;
}

}

class Son extends Parent {
// @Override没有这个概念哦
private int id = 1;
@Override
public int getId() {
return this.id;
}
}
}
0 请登录后投票
   发表时间:2009-05-27  
从这个问题看LZ对java的equlas与hashcode没有理解清楚;
这两个方法是留个自己实现的;

我完全可以写个equals永远返回false,hashcode永远返回一样;

说个实际点的吧;
set 放进去的东西能找到吗?
package com.bobo;

import java.util.HashSet;
import java.util.Random;
import java.util.Set;

public class TestMain {
public static void main(String[] args) {
new TestMain().test1();

}

public void test1() {

Set set = new HashSet();

set.add(new A());
// false
System.out.println(set.contains(new A()));

set.add(new B());
// true
System.out.println(set.contains(new B()));

set.add(new C());
// true
System.out.println(set.contains(new C()));

A a = new A();
set.add(a);
// true
System.out.println(set.contains(a));

B b = new B();
set.add(b);
// true
System.out.println(set.contains(b));

C c = new C();
set.add(c);
// 大部分情况下是false
System.out.println(set.contains(c));

}

class A {

}

class B {

@Override
public int hashCode() {

return 1;
}

@Override
public boolean equals(Object obj) {

return true;
}

}

class C {

@Override
public int hashCode() {
return new Random().nextInt();
}

@Override
public boolean equals(Object obj) {
return true;
}

}

}
理解哈吧,研究哈吧;其实很多书上也讲了;
关键是你思考没有,研究没有;
0 请登录后投票
   发表时间:2009-05-27  
jianfeng008cn 写道
linliangyi2007 写道
jianfeng008cn 写道
KimShen 写道

Test有private Id字段


Test的id应该是public的吧


private 的,因为是在同一个类的内部,所以private可以直接引用



other 不是外面传进去的吗?怎么变成了同个类的内部了?


因为在读取private属性前,other被做了cast操作,强制转成当前对象类型,这时候就允许直接访问对象内部的private属性了,你可以自己写个方法试试,比如,在CLASSA中,有个方法methodA,传入一个参数p1,如果p1 instanceof CLASSA,你就可以将它cast,然后直接读取p1的私有变量了!
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics