它适合我的类Java吗

它适合我的类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

和主题一样:它适合我的类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 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