java - 如何将实际方法作为参数传递给 Java 中的另一个方法?

标签 java generics methods

我想做的是轻松地将一个实际的方法对象传递给另一个方法。这样我就可以创建一个通用的 Joiner 函数,该函数连接对象列表的给定方法,而不必担心只传入表示该方法的字符串的危险。这在 Java 中是否可行,以便我可以使用如下语法:

joinOnMethod(String, Collections<T>, Method) e.g. 
joinOnMethod(", ", someList, T.getName())

其中 T.getName() 将 getName() 方法传递给列表中的每个对象,而不是传递方法本身的返回类型。

希望这足以满足我的需求,

阿列克谢蓝。

最佳答案

Java 中没有直接的一流函数支持。两种选择:

  • 传入方法名,使用反射获取
  • 创建一个只有一个成员的类型,如下所示:

    public interface Function<In, Out> {
        Out apply(In input);
    }
    

    然后你可以使用匿名内部类,像这样:

    joinOnMethod(", ", someList, new Function<T, String>() {
                     @Override public String apply(T input) {
                         return input.getName();
                     }
                 });
    

    当然,您可以将该函数提取为变量:

    private static Function<T, String> NAME_EXTRACTOR = 
        new Function<T, String>() {
            @Override public String apply(T input) {
                return input.getName();
            }
        };
    
    ...
    
    joinOnMethod(", ", someList, NAME_EXTRACTOR);
    

关于java - 如何将实际方法作为参数传递给 Java 中的另一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10653658/

相关文章:

WPF 设计器在解析具有覆盖属性的通用控件时存在错误

javascript - 即使使用修改上下文的函数也不要修改上下文

java - 在 list 或代码中注册接收者是更好的代码实践吗?

java - 从 servlet 重定向到 servlet

Java Scanner 通过读取带有空格的字符串来忽略接下来的问题

c# - 如何判断一个类是否实现了具有泛型类型的接口(interface)

Java 泛型转换不符合预期

javascript - 在 javascript 中将对象成员(如 this.member)传递给类方法

java - 为什么抛出方法签名的一部分

java - 带有 jaxb 属性的 xml 到 java 对象