gpt4 book ai didi

java - 从接口(interface)实现方法但具有不同的参数

转载 作者:行者123 更新时间:2023-12-01 14:08:46 25 4
gpt4 key购买 nike

我正在寻找一种好方法来实现同一方法的不同实现,该方法在接口(interface)中定义但具有不同的参数类型。这可能吗?

为了澄清这一点,假设我有一个接口(interface) Database 和两个实现类 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, ...);
...
}

数据库1

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
}
}

数据库2

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
}
}

顺便说一句,别担心 autoboxing .您正在使用 JDK >= 5,因为有 @Override 注释。

关于java - 从接口(interface)实现方法但具有不同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16131410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com