Java:使用反射填充类中的所有 setter

标签 java reflection no-framework

我有一个 X 类,其中可能包含 100 个字符串,我想为所有以“setTop”开头的 setter 模拟此类的对象。

目前我是这样做的:

public void setFtoMethods(Class aClass){
Methods[] methods = aClass.getMethods();
   for(Method method : methods){
      if(method.getName().startsWith("setTop")){
         method.invoke ....
      }
   }
}

我现在不知道该怎么做,我不太确定我能像那样填满所有这些二传手。在我的环境中,我不能使用框架,而且我使用的是 Java 6。

最佳答案

不能填充 setter ,因为它们是方法(功能),而不是值本身。但是……
可以填写对应于 getter 的类的属性(字段)的值。


假设你有一个类:

class Example {
    String name;

    int topOne;
    int topTwo;
    int popTwo;  // POP!!!
    int topThree;
}

服用:

您可以通过这种方式获取仅需要的字段:

public static void main(String[] args) {
    inspect(Example.class);
}

public static <T> void inspect(Class<T> klazz) {
    Field[] fields = klazz.getDeclaredFields();
    for (Field field : fields) {
        if (field.getName().startsWith("top")) {
            // get ONLY fields starting with top
            System.out.printf("%s %s %s%n",
                    Modifier.toString(field.getModifiers()),
                    field.getType().getSimpleName(),
                    field.getName()
            );
        }
    }
}

输出:

int topOne
int topTwo
int topThree

现在,在 if (field.getName().startsWith("top")) { 而不是 System.out 中执行您需要的任何操作。

关于Java:使用反射填充类中的所有 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41956332/

相关文章:

java - 将字符串与字符串值进行比较

java - XSLT 将计数器与字段名称连接起来以使其动态化

java - Java中自动加载特定父类(super class)的子类的工厂类?

Javascript:将元素从指定的不透明度淡入指定的不透明度?

java - 我的输入和 if-else 语句有问题,

java - facebook-java-business-sdk API 3.2.2 所需的最低 java 版本是多少

C# 8 基本接口(interface)的默认方法调用解决方法

reflection - 你能在 Clojure 中获取加载函数的 "code as data"吗?

javascript - 不使用 Jquery 查找最后一个 td

php - 没有完整堆栈框架的 Symfony 组件