【问题标题】:How to use Class.getMethod as a getter?如何使用 Class.getMethod 作为吸气剂?
【发布时间】:2019-09-27 09:30:15
【问题描述】:

我目前正在尝试使用 Class.getMethod 作为吸气剂。

我试过用这个方法:

//This works fine
Class<?> c = Class.forName("Cat");
//This is not working 
Cat cat = c.getMethod("getCat");

但它不起作用。

【问题讨论】:

  • 我认为getMethod 将返回Method 而不是Cat...
  • 您正在使用反射。仅当您知道自己在做什么时才使用。

标签: java class methods reflection getter


【解决方案1】:

类 Class 为您提供方法,例如

  • newInstance() 调用默认构造函数
  • getDeclaredConstructors()

这样您就可以从 Class 对象创建实例对象。有关如何使用反射创建实例的官方文档,请参阅here

getMethod() 可能起作用的唯一方法是:如果 Cat 类上有一个具有该名称的无参数 static 方法,那么

Cat cat = c.getMethod("getCat").invoke(null);

可能会奏效。

真正的答案在这里:

  • 当您是新手时,不要假设事情会如何运作。阅读文档或优秀教程
  • 当您是新手时:不要使用反射。反射很容易让成熟的 Java 程序员发疯。对于新手来说,这确实是一个禁区。

【讨论】:

  • @Leocat 不客气。但请请:不要将“它有效”作为您应该使用反射的证据。如前所述:反思真的很难。您在必要时使用它。新手程序员很少有使用反射的理由。在转向 Java 中的反射之前,还有无数其他更重要(不那么难)的东西需要学习。
  • 阿门。使用反射的第一条规则是:你不需要反射。
【解决方案2】:

getMethod 返回一个java.lang.reflect.Method 对象。然后你需要调用它:

Cat cat = c.getMethod("getCat").invoke(null);
// Here ------------------------^

【讨论】:

    猜你喜欢
    • 2023-02-02
    • 2019-11-26
    • 2011-06-11
    • 2020-03-07
    • 1970-01-01
    • 2021-12-17
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多