gpt4 book ai didi

java - Java 函数的参数是否需要可选接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 10:58:38 26 4
gpt4 key购买 nike

我有两个 Java 接口(interface)(版本 8),它们非常相似。我无法更改接口(interface),也无法更改实现它们的类。

public interface A {
int get();
}

public interface B {
int get();
int somethingelse();
}

现在我有一个函数,它的实现适合两个接口(interface)(几乎)。我希望它做类似的事情:

public int foo((A | B) p) {
int ret = 0;
if (p instanceof B) {
ret = p.somthingelse();
}
return ret + p.get();
}

我不想使用检查,因为这个函数位于我程序的主管道上。我希望它有良好的性能。在 Java 中可以做到这一点吗?

编辑:

一个简单的解决方案是复制/粘贴 foo() 并为每个接口(interface)以不同的方式实现它。但实际上 foo() 和接口(interface)比这长得多,我试图避免代码重复。

最佳答案

不幸的是,没有办法在两个不相关的类型之间创建这种追溯关系。

如果您可以更改 foo() 及其调用,您就可以使用与您在 foo 内调用的签名相匹配的函数接口(interface)。我在这里使用 IntSupplier,以及使用 AB 的具体实现的相应 lambda 表达式。

假设您有这些实现:

class AImpl implements A {
//implementation
}
class BImpl implements B {
//implementation
}

您可以将 foo 更改为:

public int foo(IntSupplier get, IntSupplier somethingElse) {
int ret = 0;
if (somethingElse != null) {
ret = somethingElse.getAsInt();
}
return ret + get.getAsInt();
}

这样调用它:

A a = new AImpl();
B b = new BImpl();

int result = this.foo(a::get, b::somethingelse);

关于java - Java 函数的参数是否需要可选接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59237393/

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