当前位置: 首页 > 面试题库 >

将java.lang.reflect.getMethod与多态方法一起使用

仲孙铭
2023-03-14
问题内容

考虑以下代码段:

public class ReflectionTest {

    public static void main(String[] args) {

        ReflectionTest test = new ReflectionTest();
        String object = new String("Hello!");

        // 1. String is accepted as an Object
        test.print(object);

        // 2. The appropriate method is not found with String.class
        try {
            java.lang.reflect.Method print
                = test.getClass().getMethod("print", object.getClass());
            print.invoke(test, object);
        } catch (Exception ex) {
            ex.printStackTrace(); // NoSuchMethodException!
        }
    }

    public void print(Object object) {
        System.out.println(object.toString());
    }

}

getMethod()显然不知道String可以将a馈送到需要的方法Object(实际上,它的文档说它在寻找
具有指定名称和形式参数完全相同的方法 )。

是否有一种直接的方法来像上面getMethod()那样以反射方式查找方法,但是要考虑多态性,以便上述反射示例print(Object)在查询("print", String.class)参数时可以找到该方法?


问题答案:

该反射教程

建议使用Class.isAssignableFrom()样本进行查找print(String)

    Method[] allMethods = c.getDeclaredMethods();
    for (Method m : allMethods) {
        String mname = m.getName();
        if (!mname.startsWith("print") {
            continue;
        }
        Type[] pType = m.getGenericParameterTypes();
        if ((pType.length != 1)
            || !String.class.isAssignableFrom(pType[0].getClass())) {
            continue;
        }
     }


 类似资料:
  • 问题内容: 我刚刚开始学习Java流,并遇到了问题。请看下面的例子。这是Node类的一部分: 我的意图是在流中的每个节点上使用名称和结果参数调用#findChildren。我尝试使用方法引用Node :: findChildren时没有运气。我将不胜感激的解决方案与运营商。 是否可以将方法引用与参数一起使用?我喜欢流的想法,我只想使代码更具可读性。 实际上,我认为还有一个类似的问题,方法引用具有读

  • 问题内容: 我的主页上的所有页面上都有一个函数,我希望它可以通过某些jQuery Ajax方法运行。 我现在有一些这样的代码 jQuery的 母版页中的HTML 我的主VB中的Asp.Net代码 当前,除非我将Web方法移至VB页面,否则此方法不起作用 有什么办法可以改变这部分吗 要使用母版页功能? 我尝试将其更改为 但这只是给我一个404错误 有任何想法吗? 提前致谢 问题答案: 您的网络方法代

  • 我不确定下面是使用Jdbc模板和DataSourceUtils在连接池环境中管理db连接的正确方法。getConnection。 我所做的: > <代码> 在DAOImpl中,在该方法中,我们必须使用自定义SQL数据类型调用存储过程。因此,我们需要获取相同的连接对象。我们得到的连接如下: <代码>此。连接=DataSourceUtils。getConnection(jdbcTemplate.get

  • 想得到一些建议 我的班级结构是这样的 在我的主代码(MainProg)中,我试图使用相同的函数来引用服务类中的2个方法,并看到注释中的编译错误 有没有办法声明我的函数对象,以便可以使用相同的函数对象来引用采用不同类型参数的方法?

  • 我们使用Azure存储队列作为传输在Azure辅助角色中运行NServiceBus 4.6。 我们很乐意使用默认的Azure表存储持久器存储NServiceBus相关数据(sagas、订阅等)。 不过,我们希望将业务实体存储在RavenDB中,以利用查询和Raven的其他功能。 鉴于Azure缺乏事务支持,在我们的处理程序中配置NServiceBus和使用Raven的/的最佳方式是什么。我们希望确

  • 我目前正在将IntelliJ IDE用于复杂的GWT项目。我想在GWT的开发模式中利用JRebel,所以最近我为IntelliJ安装了JRebel插件,但在使其工作时遇到了麻烦。 基本上IntelliJ不具备在更改时自动编译应用程序的能力,所以每当您对代码进行更改时,我都必须进行编译- 信息:使用JavaC1.7.0_21编译java源代码信息:15个错误信息:0个警告信息:编译完成,9分钟5秒内