美文网首页
关于Java反射

关于Java反射

作者: Hey_Shaw | 来源:发表于2018-02-06 09:11 被阅读7次

记 java.lang.IllegalArgumentException: object is not an instance of declaring class

本来想通过反射获取某个List对象中指定属性的值。根据网上很多答案遇到了上面的问题!

贴代码:

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


import io.github.vforjuvenile.propertiesEditor.Person;

public class ListTest {
    
    public static void main(String[] args) throws Exception {
        Person p = new Person();
        p.setAge(20);
        Person p1 = new Person();
        p1.setAge(25);
        List<Person> list = new ArrayList<Person>() ;
        list.add(p);
        list.add(p1);
        sumList(list,"age");
    }
    
    private static int sumList(List<?> list,String attribute) {
        try {
            
            for (Iterator<?> iterator = list.iterator(); iterator.hasNext();) {
                Object object = iterator.next();
                Class<?> clazz = object.getClass();
//              Field field = clazz.getDeclaredField(attribute);
//              System.out.println(field);
                attribute = attribute.substring(0, 1).toUpperCase() + attribute.substring(1);//拼接获取属性get方法的名字
//              Method m = clazz.getMethod("get" + attribute);//获取get方法
                Method m = clazz.getDeclaredMethod("get" + attribute);//获取get方法
                System.out.println(clazz.getName());
                Object result = m.invoke(clazz);//获取属性值(这步报错)
                System.out.println(result);
            }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            
        
        return 0;
    }
}

看了很多资料,根据报错发现,m.invoke();方法里应该穿的是对象,而不应该是类,应该改为:

Object result = m.invoke(object); 

iterator.next();获取的对象!

相关文章

  • 关于java反射

    //getDeclaredMethods 返回当前类定义的所有方法 (Field同理) //getMethod...

  • 关于Java反射

    记 java.lang.IllegalArgumentException: object is not an in...

  • 关于Java反射

    关于Class 类加载的几种方式 new Xxx() classLoader.loadClass(String c...

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 干货!使用Java注解和反射实现Junit4中的用例调用(附源码

    前面我写了关于Java注解和反射的文章: 测试开发必须掌握的知识点:Spring的核心知识点 -Java反射[ht...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • java关于反射 example

    在之前的时候第一次知道了java的反射的概念。 其应用的是java的类加载器, java的类加载器在加载一个类文件...

网友评论

      本文标题:关于Java反射

      本文链接:https://www.haomeiwen.com/subject/pgnizxtx.html