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

Ale*_*lue 4 java generics methods

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

joinOnMethod(String, Collections<T>, Method) e.g. 
joinOnMethod(", ", someList, T.getName())
Run Code Online (Sandbox Code Playgroud)

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

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

阿列克谢蓝.

Jon*_*eet 6

直接在Java中没有一流的功能支持.两种选择:

  • 传递方法的名称,并使用反射来获取它
  • 创建一个包含单个成员的类型,如下所示:

    public interface Function<In, Out> {
        Out apply(In input);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    然后你可以使用匿名内部类,如下所示:

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

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

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

  • 驾驶式downvoter:留下评论,解释您认为这个答案的错误.如果你有一个有效的观点,我相信Jon会改进他的答案.但最有可能的是,你会从你的错误观念中获益. (5认同)