gpt4 book ai didi

java - 在不使用上下文接口(interface)的情况下决定在运行时调用什么方法(没有 Java8 特性)

转载 作者:行者123 更新时间:2023-11-30 07:05:48 26 4
gpt4 key购买 nike

标题很容易被误解,但归结为我很可能需要一个 来消除冗余代码。为了让我的问题尽可能清楚,我做了一个代码示例,而不是写一个模糊的解释。


基本上,我有以下功能:
getValue1(), getValue2(), getValue3(), ... , getValue12()

这些函数可能如下所示(尽管它们彼此之间略有不同,并且不能通过使它们实现策略模式的接口(interface)来编辑):

public int getValue1()
{
return 1 + 2;
}


接下来我们有一个辅助类 myClass,它需要 getValue() 函数返回的值。 myClass 中的函数将如下所示(每个函数的不同之处在于它们使用了不同的 getValue() 函数):

public int getMyValues1()
{
int[] values = new int[10];
for (int i = 0; i < 10; i++) {
int[i] = getValue1() // NOTE: getValueX() may output differently each time.
}
}


我们已经解决了我们的问题。
如果我们要为每个相应的 getValues() 创建一个 getMyValues() 函数,我们将不得不多次复制并粘贴相同的代码。

这违背了 OOP 语言所代表的一切——这就是为什么我需要你的帮助。


非常感谢任何建议!



编辑:

我重新打开了问题,因为我要使用的 IDE 不支持 Java 8。

基本上我有以下设置:

getValueClass
getValue1()
getValue2()
etc.

myClass
getMyValues1()
getMyValues2()
etc.

implemetingClass
private myClass mc = new MyClass()
main()
getLowestValue(int[] values)


因此 main() 可能如下所示 - 如果我希望输出最低值:

public static void main(String[] args)
{
...
System.out.print(getLowestValue(mc.getMyValues1()));
...
}

此编辑表明策略模式不可行,因为我在一个类中有我的函数。

希望这能消除任何困惑,我真的希望你们能帮我解决这个问题!

最佳答案

假设这些方法是公共(public)的,那么在 Java 8 中,您应该能够使用函数式接口(interface)(在这个简单的示例中它是 java.util.function.IntSupplier )并将对这些方法的引用作为 lambda 表达式传递。

类似的东西(未测试编译):

public int[] getMyValues(IntSupplier supplier) {
int[] values = new int[10];
for (int i = 0; i < 10; i++) {
int[i] = supplier.getAsInt()
}
return values;
}

调用方式:

int[] values = someobject.getMyValues(someobject::getValues1)

这或多或少地将这些方法用作策略,而不需要制作实际的接口(interface)和多个实现:策略接口(interface)本身就是功能接口(interface),方法引用生成实现。

编辑:如果您不能使用 Java 8,那么您可以仅使用 1 个返回 int 的方法来定义您自己的接口(interface)。由于缺乏对方法引用的支持,调用变得更长:

int[] values = someobject.getMyValues(new MyIntProducer() { 
public int getValue() { return someobject.getValues1(); };
}

请注意,someobject 局部变量需要设置为 final 才能工作。

关于java - 在不使用上下文接口(interface)的情况下决定在运行时调用什么方法(没有 Java8 特性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26331153/

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