2017-06-30 5 views
0

問題があることで、私はデータ構造のためのラボを持っているし、先生はあなたがそれは、hashCodeのパラメータの ipValueの呼び出しのためのLongオブジェクトを返しますハッシュ(IPアドレス)をオーバーライド ときに 『クラスIpAddressValueHasherは調理人を実装』を作成」私に尋ねる。 私はインタフェースメソッドを異なるNumber戻り値の型でオーバーライドすることはできますか?

。インターフェース(intを返した)長いを返すメソッドをオーバーライドする方法をすべてのヘルプを知らないかのポインタは、まず

public class IpAddressValueHasher implements Hasher<IpAddress> { 
    @Override 
    public long hash(IpAddress ip) { //error on this line, can't return long 
     long ipValue = ip.getIpValue(); 
     return ipValue; 
    } 
} 


public class IpAddress //new class 
{ 
    private long ipValue=0; 
    private String dottedDecimal="0.0.0.0"; 

    public IpAddress(){} 

    public IpAddress(String dec) 
    { 
     setDottedDecimal(dec); 
    } 

    public boolean setDottedDecimal(String s) 
    { 
     if(s==null || s.length() == 0) 
      return false; 
     dottedDecimal = s; 
     ipValue = 0; 
     String [] tokens = s.split("[.]"); 
     for(String tok : tokens){ 
      int subVal = Integer.parseInt(tok); 
      ipValue = ipValue * 256 + subVal; 
     } // end for 
     return true; 
    } 

    public long getIpValue(){ return ipValue; } 

    public String getDottedDecimal(){ return dottedDecimal; } 

    public String toString(){ return dottedDecimal + ", " + Long.toHexString(ipValue); } 
} // end class IpAddress 

public interface Hasher<E> { 
    public int hash(E elem); 
} 
+2

'パブリックインターフェイス調理人 {パブリックVのハッシュ(KのELEMを)。 } ' –

+0

私は教師がコードを提供したので、インターフェース自体を変更することはできません。新しいクラスコードを作成するときにのみこれを行うにはどうしますか? –

+1

インタフェースのポイントは、インタフェースを定義することです。これを実現する唯一の方法はElloitの提案です –

答えて

2

共変戻り値の型素晴らしいおかげだろうプリミティブデータtypでは機能しませんe。共変リターン型とは、リターン型がサブクラスと同じ方向に変化する可能性があることを意味します。つまり、メソッドをオーバーライドすると、そのメソッドの戻り値の型は、オーバーライドされたメソッドの戻り値の型のサブタイプになります。 - たとえば、あなたの場合は

public class A { 
     public Object method() {return null;} 
    } 
    public class B extends A { 
     @Override 
     public String method() {return "";} 
    } 

、次の変更を行うことができます。

public class IpAddressValueHasher implements Hasher<IpAddress> { 
     @Override 
     public Long hash(IpAddress ip) { // This line 
      long ipValue = ip.getIpValue(); 
      return ipValue; 
     } 
    } 
    interface Hasher<E> { 
     public Number hash(E elem); // This line 
    } 
関連する問題