0

これがどのように機能するかを理解しようとしています。メソッドが java.lang.Object に格納されていると思いますが、コードでメソッドをオーバーライドする方法がわかりません。これは、私の理解をテストするために設計した小さなプログラムです (正しくありませんでした)。

アドレステスター:

import java.util.ArrayList;
import java.util.Scanner;

public class AddressTester
{

    public static void main(String[] args)
    {

        Address home = new Address("123 Loving Fat Girl ln", "Dollywood", "NY",
                "98765");

        Scanner in = new Scanner(System.in);

        System.out.println("-- Enter your home address --");
        System.out.println("123 Loving Fat Girl ln, Dollywood, NY, 98765");

        System.out.print("Enter the street address: ");
        String addr = in.nextLine();

        System.out.print("Enter the city: ");
        String city = in.next();

        System.out.print("Enter the state: ");
        String state = in.next();

        System.out.print("Enter the zipcode: ");
        String zipcode = in.next();

        Address enteredAddress = new Address(addr, city, state, zipcode);

        System.out.println(enteredAddress);

        if (home.equals(enteredAddress))
        {
            System.out.println("You are correct!");
        }
        else
        {
            System.out.println("You are incorrect!");
        }

        ArrayList<Address> addresses = new ArrayList<Address>();
        addresses.add(home);

        if (addresses.contains(enteredAddress))
        {
            System.out.println("The address wasn't found");
        }
        else
        {
            System.out.println("The address was found");
        }

    }

}

住所:

public class Address
{
    private String address;
    private String city;
    private String state;
    private String zipcode;


    public Address(String address, String city, String state, String zipcode)
    {
        this.address = address;
        this.city = city;
        this.state = state;
        this.zipcode = zipcode;

    }

    public boolean equals(Object otherObject)
    {
        if(otherObject == this)
        {
            return true;
        }
        if(otherObject != this)
        {
            return false;
        }
        return true;
    }

    public String getAddress()
    {
        return address;
    }

    public void setAddress(String addr)
    {
        this.address = addr;
    }

    public String getCity()
    {
        return city;
    }

    public void setCity(String city)
    {
        this.city = city;
    }

    public String getState()
    {
        return state;
    }

    public void setState(String state)
    {
        this.state = state;
    }

    public String getZipcode()
    {
        return zipcode;
    }

    public void setZipcode(String zipcode)
    {
        this.zipcode = zipcode;
    }

}
4

4 に答える 4

1

この例では、hashCode、toString、および equals をオーバーライドします。私の基準は、equals は SomeClass の someAttribute を使用して、上記のクラス インスタンス間で equals() を定義する必要があるということです。HashCode は equals と同じように再定義する必要があります。

@Override
public String toString() {
     return "SomeClass [attribute=" + someAttribute + "]";
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + someAttribute;
    return result;
}
@Override
public boolean equals(Object obj) {
    if (obj == null)
        return false;       
    if (this == obj)
        return true;

    if (getClass() != obj.getClass())
        return false;
    SomeClass other = (SomeClass) obj;
    if (someAttribute != other.someAttribute)
        return false;
    return true;
}
于 2013-03-28T03:11:26.247 に答える
1

身元を確認しているだけで、実際には望んでいません。equals() の実装に関するこの良いリファレンスをチェックしてください: 彼らが言及しているように

equals は通常、ID ではなく状態を比較する必要があります。これは、データベース レコードにマップされる「データ中心」のクラスに特に当てはまります。

于 2013-03-28T02:54:42.717 に答える
0

この種の質問は数え切れないほど答えられています。

Eclipse IDE を使用している場合は、デフォルトで、equals、hashCode、および toString 関数を生成する機能が提供されます。

また、 equals メソッドである種のクラス変数を使用して比較する必要があります。

このトピックに関する無数の結果に圧倒されるには、Google 検索を行ってください。

于 2013-03-28T02:53:40.050 に答える
0

==演算子は、 のインスタンスに適用されると、そのの同じインスタンスObjectへの 2 つの参照間で比較が行われているかどうかをチェックします。の 2 つのインスタンスが同じ住所、市区町村、州、および郵便番号で作成された場合、これら 2 つの異なるインスタンスを比較するために使用されると、演算子は返されます。4 つのフィールドのそれぞれが一致することを明示的にチェックし、その場合に戻るには、関数でオーバーライドする必要があります。ObjectAddress==falseequals()Addresstrue

健全なオーバーライド実装を構築するのequals()は難しいため、他の投稿者が提供しているリンクを確認する必要があります。

于 2013-03-28T03:01:54.433 に答える