Java 是否可以使用不同的数字返回类型重写接口方法?
我有一个数据结构实验室,老师问我“创建‘类IpAddressValueHasher实现Hasher’”,所以当你 重写哈希(IpAddress)它为参数的 ipValue对hashCode的调用。 问题是我不知道如何重写接口(它返回一个int),而接口是一个返回long的方法 任何帮助或指点都很好,谢谢Java 是否可以使用不同的数字返回类型重写接口方法?,java,data-structures,hashcode,Java,Data Structures,Hashcode,我有一个数据结构实验室,老师问我“创建‘类IpAddressValueHasher实现Hasher’”,所以当你 重写哈希(IpAddress)它为参数的 ipValue对hashCode的调用。 问题是我不知道如何重写接口(它返回一个int),而接口是一个返回long的方法 任何帮助或指点都很好,谢谢 public class IpAddressValueHasher implements Hasher<IpAddress> { @Override public l
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);
}
公共类IpAddressValueHasher实现Hasher{
@凌驾
公共长哈希(IpAddress ip){//此行出错,无法返回长哈希
long ipValue=ip.getIpValue();
返回ipValue;
}
}
公共类IP地址//新类
{
私有长ipValue=0;
私有字符串dottedDecimal=“0.0.0.0”;
公共IpAddress(){}
公共IP地址(字符串dec)
{
setDottedDecimal(十二月);
}
公共布尔值setDottedDecimal(字符串s)
{
如果(s==null | | s.length()==0)
返回false;
dottedDecimal=s;
ipValue=0;
字符串[]标记=s.split(“[.]”);
for(字符串tok:令牌){
int subVal=Integer.parseInt(tok);
ipValue=ipValue*256+subVal;
}//结束
返回true;
}
public long getIpValue(){return ipValue;}
公共字符串getDottedDecimal(){return dottedDecimal;}
公共字符串toString(){return dottedDecimal+,“+Long.tohextString(ipValue);}
}//结束类IP地址
公共接口哈希器{
公共整数散列(E元素);
}
首先,协变返回类型不适用于原始数据类型。协变返回类型意味着返回类型可能与子类的返回类型在同一方向上变化。这意味着当我们重写方法时,该方法的返回类型可以是被重写方法返回类型的子类型。F或示例-
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
}
公共类IpAddressValueHasher实现Hasher{
@凌驾
公共长哈希(IpAddress ip){//此行
long ipValue=ip.getIpValue();
返回ipValue;
}
}
接口哈希器{
公号散列(E元素);//此行
}
首先,协变返回类型不适用于原始数据类型。协变返回类型意味着返回类型可能与子类的返回类型在同一方向上变化。这意味着当我们重写方法时,该方法的返回类型可以是被重写方法返回类型的子类型。F或示例-
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
}
公共类IpAddressValueHasher实现Hasher{
@凌驾
公共长哈希(IpAddress ip){//此行
long ipValue=ip.getIpValue();
返回ipValue;
}
}
接口哈希器{
公号散列(E元素);//此行
}
公共接口哈希程序{public V hash(K elem);}
我不认为我可以更改接口本身,因为该代码是由老师提供的。是否只有在创建新的类代码时才可以这样做?你不能,接口的关键是它定义了接口。Elloitt的建议是实现这一点的唯一方法你不能-但也值得指出的是,你不是r也可以使用Long
对象返回Long
原语。这确实是不可能的。你应该请老师澄清。public interface Hasher{public V hash(K elem);}
我不认为我可以更改接口本身,因为该代码是由老师提供的。是否只有在创建新的类代码时才可以这样做?你不能,接口的关键是它定义了接口。Elloitt的建议是实现这一点的唯一方法你不能-但也值得指出的是,你不是r再次打开一个Long
对象,您将返回一个Long
原语。这确实是不可能的。您应该向您的老师寻求澄清。