我有一个数据结构实验室,老师问我"创建类IpAddressValueHasher实现Hasher'所以当你 override hash(IpAddress)它返回参数&的一个Long对象 ipValue调用hashCode。 问题是我不知道如何覆盖返回long的方法接口(返回一个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);
}
答案 0 :(得分:2)
首先,协变返回类型不适用于原始数据类型。通过协变返回类型,我们的意思是返回类型可以在与子类相同的方向上变化。这意味着当我们重写方法时,该方法的返回类型可以是重写方法的返回类型的子类型。例如 -
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
}