当前位置: 首页 > 知识库问答 >
问题:

如何在Java中将函数作为参数传递[重复]

邴子实
2023-03-14

在Python中,我可以很容易地将函数作为参数传递,并在另一个函数内部执行。

def isFaster(a, b, c):
  # return the faster one in a, b, and c

def isSlower(a, b):
  # return the slower one in a, b, and c

def checkSpeed(game, a, b, c):
  return game(a, b, c)

def main(a, b, c):
  game_type = input('Please choose "faster" or "slower": ')
  if game_type == 'faster':
    checkSpeed(isFaster, a, b, c)
  elif game_type == 'slower':
    checkSpeed(isSlower, a, b, c)
  else:
    print('Incorrect Input')

共有1个答案

贺桐
2023-03-14

不幸的是,基本Java没有函数指针,可以像在python或C中那样四处传递。但是,如果您查看模块Java.util.function,您可能会找到一种方法来完成您所要做的事情。

给出您的示例,并简化为2个参数的情况(对于3个参数,您必须创建自己的函数接口),您可以这样做逻辑:

public class Solution {

    private static final BiFunction<Integer, Integer, Integer> IS_SLOWER = Math::min;

    private static final BiFunction<Integer, Integer, Integer> IS_FASTER = Math::max;

    public static Integer checkSpeed(BiFunction<Integer, Integer, Integer> check,
                                     Integer a, Integer b) {
        return check.apply(a, b);
    }

    public static void main(String[] args) {
        Integer slower = checkSpeed(IS_SLOWER, 1, 5); // 1
        Integer faster = checkSpeed(IS_FASTER, 1, 5); // 5

        System.out.println("Slower: " + slower + ", faster: " + faster);
    }

}

 类似资料:
  • 问题内容: 在Java中,如何将一个函数作为另一个函数的参数传递? 问题答案: Java 8及以上 如果你的类或接口只有一个抽象方法(有时称为SAM type),则使用Java 8+ lambda表达式,例如: 然后可以在使用MyInterface的任何地方替换lambda表达式: 例如,你可以非常快速地创建一个新线程: 并使用方法引用语法使其更加清晰: 如果没有 lambda表达式,则最后两个示

  • 问题内容: 我已经熟悉Android框架和Java,并希望创建一个通用的“ NetworkHelper”类,该类可以处理大多数联网代码,使我能够从中调用网页。 我遵循了来自developer.android.com的这篇文章来创建我的网络类:http : //developer.android.com/training/basics/network- ops/connecting.html 码:

  • ...基本上是代码重复。是否有一种方法可以将函数作为方法参数传递,以优化这一点,使两个筛选条件都有一个方法?

  • 假设我们有python中的函数: 虽然我可能会将传递给A,但我正在寻找一种优雅的方法来传递类似于的东西来执行。 我现在看到的唯一方法是发送一个函数列表并按顺序应用它们。有没有更好的办法?

  • 最近我在使用c语言时遇到了一些问题,基本上是这样的: 在一个函数(比如intmain)中,我声明了一个变量Y=5,我有一个lambda函数,它接收一个值并将Y相加; 我的问题是:我需要将这个lambda函数传递给一个已经存在的函数,这样它就可以在另一个函数内部调用。 我尝试了几件事,但没有一个像我预期的那样工作(有些甚至不起作用): 另一个问题是我不能改变我的receives函数签名,因为代码的剩

  • 问题内容: 如何在不执行“父”函数或不使用函数的情况下将函数作为参数传递?(因为我已经读到它是不安全的。) 我有这个: 它可以工作,但是问题是在调用函数时触发,而不是在函数中使用时触发。 根据我所读的内容,我可以使用来解决它,但这不是最佳实践。如何在JavaScript中将函数作为参数传递? 问题答案: 您只需要删除括号: 然后,这将传递函数而不先执行它。 这是一个例子: