从接口实现方法但参数不同
我正在寻找一种在接口中定义但具有不同参数类型的相同方法的不同实现的好方法。这可能吗?
为了澄清这一点,假设我有一个数据库接口和两个实现类Database1和Database2。数据库有一个方法createNode(…)和另一个方法ModifyNode(…)。问题在于,对于Database1,createNode方法的返回类型应为long(标识符)。但是,对于Database2,它将是技术中特定的对象(在这种情况下为OrientDB,但这没有太大关系,当然,它只是对Object的扩展)。并且两个create(…)返回类型都应用作ModifyNode(…)参数之一。
我当时想做的是:
`public interface Database { public Object createNode(...);
public void modifyNode(Object id, ...);
...
}`
public class Database1 {
@Override
public Object createNode(...) {
...
long result = // obtain id of created node
return Long.valueOf(result);
}
@Override
public void modifyNode(Object id, ...) {
...
// use id as ((Long)id).longValue();
}
}
public class Database2 {
@Override
public Object createNode(...) {
...
SomeObject result = // obtain id of created node
return result;
}
@Override
public void modifyNode(Object id, ...) {
...
// use id as (SomeObject)id
}
}
我想知道是否有更好的方法可以做到这一点。特别要避免Long-> long和long->
Long转换。我在StackOverflow中看到了许多类似的问题,但这些都不是我想要的。提前非常感谢您。
回答:
这是泛型的一个例子
public interface Database<T> { public T createNode(...);
public void modifyNode(T id, ...);
...
}
class Database1 implements Database<Long> { @Override
public Long createNode(...) {
...
long result = // obtain id of created node
return result;
}
@Override
public void modifyNode(Long id, ...) {
...
// use id
}
}
public class Database2 implements Database<SomeObject> { @Override
public SomeObject createNode(...) {
...
SomeObject result = // obtain id of created node
return result;
}
@Override
public void modifyNode(SomeObject id, ...) {
...
// use id as (SomeObject)id
}
}
顺便说一句,不用担心自动装箱。您正在使用JDK>
= 5,因为有@Override注释。
以上是 从接口实现方法但参数不同 的全部内容, 来源链接: utcz.com/qa/404508.html