它适合我的类Java吗
和主题一样:它适合我的类Java吗?我已经通过Eclipse自动生成了它,我不知道它是否能生成它适合我的类Java吗,java,equals,Java,Equals,和主题一样:它适合我的类Java吗?我已经通过Eclipse自动生成了它,我不知道它是否能生成vector.remove(pracownik)会正常工作。还是通过Eclipse生成它是错误的 import java.util.Date; import java.util.Vector; public class Pracownik extends Osoba { private String stanowisko; private int pensja; private
vector.remove(pracownik)
会正常工作。还是通过Eclipse生成它是错误的
import java.util.Date;
import java.util.Vector;
public class Pracownik extends Osoba {
private String stanowisko;
private int pensja;
private Date dataZatrudnienia;
public Pracownik(Adres adres, String telefon, String imie, String nazwisko,
int id, Date dataUrodzenia, String stanowisko, int pensja,
Date dataZatrudnienia) {
super(adres, telefon, imie, nazwisko, id, dataUrodzenia);
this.stanowisko = stanowisko;
this.pensja = pensja;
this.dataZatrudnienia = dataZatrudnienia;
}
public String getStanowisko() {
return stanowisko;
}
public int getPensja() {
return pensja;
}
public Date getDataZatrudnienia() {
return dataZatrudnienia;
}
@Override
public String toString() {
return super.toString() + "\nstanowisko=" + stanowisko + "\npensja="
+ pensja + "\ndataZatrudnienia=" + dataZatrudnienia;
}
private static Vector<Pracownik> ekstensja = new Vector<Pracownik>();//kolekcja zawierajaca ekstensje
private static void dodajPracownik(Pracownik pracownik) { //metoda dodajac aobiekt do ekstensji
ekstensja.add(pracownik);
}
private static void usunPracownik(Pracownik pracownik) {//metoda usuwajaca obiekt z ekstensji
ekstensja.remove(pracownik);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pracownik other = (Pracownik) obj;
if (dataZatrudnienia == null) {
if (other.dataZatrudnienia != null)
return false;
} else if (!dataZatrudnienia.equals(other.dataZatrudnienia))
return false;
if (pensja != other.pensja)
return false;
if (stanowisko == null) {
if (other.stanowisko != null)
return false;
} else if (!stanowisko.equals(other.stanowisko))
return false;
return true;
}
private static void pokazEkstensje(){ //wyswietlenie ekstensji przy pomocy petli for each
System.out.println("Ekstensja klasy Pracownik");
for(Pracownik pracownik: ekstensja)
System.out.println(pracownik);
System.out.println();
}
public static void main(String[] args){
Adres adres = new Adres("tara", "588 m.42", "03-422", "Warszawa");
Pracownik pracownik = new Pracownik(adres, "02-6451-4564", "Ala", "Kotowa", 323, new Date(), "szef", 14000, new Date()); //tworze pracownika
System.out.println(pracownik);//wyswietlam pracowanika
//tworze stazyste
Stazysta stazysta = new Stazysta(adres, "3232 9898", "frajer", "costam", 3232, new Date(), "podawanie kawy", 0, new Umowa(new Date(2010,10,5), new Date(2011,11,8)));
//wysswietlam stazyste
System.out.println(stazysta);
}
}
import java.util.Date;
导入java.util.Vector;
公共类Pracownik扩展Osoba{
私人字符串stanowisko;
私人内特佩斯贾酒店;
私人日期dataZatrudnienia;
公共Pracownik(Adres Adres、String telefon、String imie、String nazwisko、,
int-id,Date-dataUrodzenia,String-stanowisko,int-pensja,
日期数据(第二天){
超级(adres、telefon、imie、nazwisko、id、dataUrodzenia);
this.stanowisko=stanowisko;
this.pensja=pensja;
this.dataZatrudnienia=dataZatrudnienia;
}
公共字符串getStanowisko(){
返回stanowisko;
}
public int getPensja(){
返回pensja;
}
公开日期getDataZatrudnienia(){
返回数据zatrudnienia;
}
@凌驾
公共字符串toString(){
返回super.toString()+“\nstanowisko=“+stanowisko+”\npensja=”
+pensja+“\nDazatrudnienia=“+dataZatrudnienia;
}
私有静态向量ekstensja=new Vector();//kolekcja zawierajaca ekstensje
私有静态无效dodajPracownik(Pracownik Pracownik){//metoda dodajac aobiekt do ekstensji
ekstensja.add(pracownik);
}
私有静态无效usunPracownik(Pracownik Pracownik){//metoda usuwajaca obiekt z ekstensji
ekstensja.移除(pracownik);
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
Pracownik其他=(Pracownik)obj;
if(dataZatrudnienia==null){
if(other.dataZatrudnienia!=null)
返回false;
}else如果(!dataZatrudnienia.equals(other.dataZatrudnienia))
返回false;
if(pensja!=其他.pensja)
返回false;
if(stanowisko==null){
if(other.stanowisko!=null)
返回false;
}else如果(!stanowisko.equals(other.stanowisko))
返回false;
返回true;
}
私有静态无效pokazEkstensje(){//wyswietlenie ekstensji przy pomocy petli
System.out.println(“Ekstensja klasy Pracownik”);
对于(Pracownik Pracownik:ekstensja)
系统输出打印(pracownik);
System.out.println();
}
公共静态void main(字符串[]args){
Adres Adres=新Adres(“塔拉”、“588 m.42”、“03-422”、“华沙”);
Pracownik Pracownik=新Pracownik(地址,“02-6451-4564”,“Ala”,“Kotowa”,323,新日期(),“szef”,14000,新日期());//tworze pracownika
System.out.println(pracownik);//wyswietlam pracowanika
//tworze stazyste
Stazysta Stazysta=新Stazysta(adres,“3232 9898”,“frajer”,“costam”,3232,新日期(),“podawanie kawy”,0,新Umowa(新日期(2010,10,5),新日期(2011,11,8));
//威斯维特兰斯泰兹酒店
系统输出打印LN(stazysta);
}
}
我不是这方面的专家,但我相信双等式比较的是地址,而不是变量的内容。因此,您可以将其更改为.equals()。如果我错了,我希望有更多经验的人纠正我。使用Eclipse生成equals方法很好。当且仅当字段影响对象的逻辑相等性时,确保该字段包含在生成中非常重要
当重写equals时,还应该重写hashCode
通常,在重写继承的方法时,需要确保新方法符合超类中声明的任何规则。声明了几个规则,包括“如果根据equals(Object)方法两个对象相等,那么对两个对象中的每个对象调用hashCode方法必须产生相同的整数结果。”
如果equals方法也是从Object继承的,则从Object继承的哈希代码遵循该规则。当与equals方法一起使用时,它不遵循该规则
如果您让Eclipse执行“生成hashCode()和equals()”的操作,它会正确的。如果手动编写equals方法,则需要编写自己的hashCode来匹配
实际上,不遵循对象hashCode约定的类是将来重用的陷阱。散列数据结构,如HashMap和HashSet,如果对象具有损坏的hashCode方法,则可能无法找到实际存在的对象。我从中学到的一个教训是,依赖于“我永远不会用这种方式”是错误的。在前进的过程中保持安全要好得多。看起来很好。。。但Pracownik的向量会在我的梦中出现…对,向量移除方法使用equals()。只是我会害怕超级战场(Osoba)。如果你的设计在没有考虑adres、telefon、imie、nazwisko、id、dataUrodzenia的情况下没有复制Pracownik对象,那么它应该是可以的。他使用
=
来比较int
原语,这会很好。它在字符串的情况下不起作用。此外,double
s没有equals
方法。无论何时重写equals
,都应该重写hashCode
。