2017-10-26 1 views
0
私は効果的なJavaで「等しい」メソッドのコンセプトを経た

に.S、そしてそこに私はコードの下が見つかりました:私はすることはできないのです。ここ意味では効果的なJavaの例

@Override 
public boolean equals(Object o) { 
    if (o instanceof CaseInsensitiveString) 
     return s.equalsIgnoreCase(((CaseInsensitiveString) o).s); 
    if (o instanceof String) // One-way interoperability!    
     return s.equalsIgnoreCase((String) o); 
    return false; 
} 

特定の行を得ます。それは((CaseInsensitiveString) o).sです。今私がこのコードから理解できるのは、オブジェクト 'o'がCaseInsensitiveStringクラスに型キャストされていることです。今は).sの意味は?

+0

大量のコードをバックティックでフォーマットしないでください。代わりに4つのスペースをインデントします。私はそれを修正しましたが、他の書式設定の問題も修正しようとする必要があります。 – Carcigenicate

+1

これは 'casting'と呼ばれています – EpicPandaForce

+1

' s'は特定のクラスの型固有のフィールドです – EpicPandaForce

答えて

1

クラスCaseInsensitiveStringは、タイプStringsというメンバを持っています。

はそのメンバーにアクセスするには、

  • ((CaseInsensitiveString) o)を使用してCaseInsensitiveStringObject oをキャストし、その後((CaseInsensitiveString) o).sを使用してフィールドsにアクセスする必要があります。
4

あなたは単独で).sを読み取ることができません:それはちょうどCastInsensitiveStringのインスタンスからフィールドにアクセスしています

CaseInsensitiveString c = (CaseInsensitiveString) o; 
return s.equalsIgnoreCase(c.s); 

:よう

return s.equalsIgnoreCase(((CaseInsensitiveString) o).s); 

です。

+0

OPが '.s 'の意味を混乱させるのは、なぜ' s'のような名前のパブリックメンバーを持たないのかという素晴らしい例です。それがもっと意味のある名前だったら、もっと明白だったかもしれません。 –

関連する問題