首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过反射调用方法,并提供作为param的方法

如何通过反射调用方法,并提供作为param的方法
EN

Stack Overflow用户
提问于 2019-12-10 23:16:53
回答 1查看 32关注 0票数 0

我有一个通过反射调用的方法:

代码语言:javascript
运行
复制
    @Override
    public SELF withLogConsumer(Consumer<OutputFrame> consumer) {
        this.logConsumers.add(consumer);
        return self();
    }

在不进行反射的情况下,我将使用如下方法调用此方法:

代码语言:javascript
运行
复制
   Container c = new Container().withLogConsumer(SimpleClass::log);

    public void log(OutputFrame frame) {
        String msg = frame.getUtf8String();
        if (msg.endsWith("\n"))
            msg = msg.substring(0, msg.length() - 1);
        Log.info(this.clazz, "output", msg);
    }

使用反射,我希望能够做到:

代码语言:javascript
运行
复制
      Constructor<?> ctor = SimpleClass.class.getConstructor();
      Object object = ctor.newInstance();
      Method withLogConsumer = object.getClass().getMethod("withLogConsumer", Consumer<OutputFrame>.class);
      withLogConsumer.invoke(object, SimpleClass::log)

这方面有两个问题,我似乎也找不到答案:

  1. 如何使用反射创建接受泛型方法参数类型的方法?(就像我的方法接受ArrayList)
  2. 如何传递一个使用双冒号语法的方法?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-10 23:46:43

  1. 忽略泛型类型;使用原始、擦除、非泛型类型.Method withLogConsumer = object.getClass().getMethod("withLogConsumer", Consumer.class);
  2. Explicitly将方法引用转换为适当的接口类型:withLogConsumer.invoke(object, (Consumer<OutputFrame>) SimpleClass::log);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59276729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档