「java中反射给属性赋值」java反射 给属性赋值

博主:adminadmin 2023-01-26 13:36:10 360

今天给各位分享java中反射给属性赋值的知识,其中也会对java反射 给属性赋值进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java反射 在只知道类名的情况下,怎样给其中的私有属性赋值

利用反射能

//假设类名为A

// 实例化类

A  p = new A();

// 获取class

Class c = p.getClass();

// 获取该类所有的字段

Field[] fields = c.getDeclaredFields();

// 遍历赋值

for (int i = 0; i  fields.length; i++) {

String filedName = fields[i].getName();

// AccessibleTest类中的成员变量为private,故必须进行此操作

fields[i].setAccessible(true);

// 判断类型

Class? type=fields[i].getType();

//获取字段类型

String typeName=type.getName();

System.out.println(type.getName());

// 对字段进行赋值 第一个参数为对象引用第二个参数为要附的值

//如果为字符串类型

if("java.lang.String".equals(typeName)){

fields[i].set(p, "1");

}

//如果为日期类型

else if("java.util.Date".equals(typeName)){

fields[i].set(p, new Date());

}

else{

fields[i].set(p, 1);

}

}

//楼主我只是简单的写了下。可能还需要判断字段名称以及其他类型什么的。

最后希望楼主多看看java 文档。

JAVA反射中通过Class.forname()如何带参数的方法怎么赋值和调用呀?

用Class.forName方法动态加载构造方法带参数的类。

1、在用Class.forName方法动态加载构造方法带参数的类时,为了将参数传递进去,可以考虑java的反射机制,比如有一个类如下:

public class Cat{

                    private int age;

                    private String name;

                    public void Cat(String name, int age){

                           this.name = name;

                           this.age = age;

                   }

        }

2、如果想用Class.forName方法动态加载这个类,可以用以下类似的代码实现:

 import java.lang.reflect.Constructor;

        publc class LoadCat{

                    private int age;

                    private String name;

                    public void LoadCat(String name, int age){

                           super();

                           this.name = name;

                           this.age = age;

                   }

                   public static void main(String args[ ]){

                             Class clazz = Class.forName("Cat");

                             Constructor constructor = clazz.getConstructor(String.class, int.class);

                             LoadCat test = (LoadCat) constructor.newInstance("test", 1);

                   }

        }

3、补充:

(1)反射方式调用对象类的由参构造方法!

(2)调用者与被调用者不在同包中(SpecialCalendar位于Calendar包中) 

调用者使用Class.forName()方法,应该显示的注明路径(包名) 

Class? special = Class.forName("Calendar.SpecialCalendar"); 

Constructor? special_Calendar = 

special.getConstructor(int.class,int.class,int.class); 

specialCalendar = (SpecialCalendar) 

special_Calendar.newInstance(2011,5,27);

4、方法二:

package com.sanmao10;import java.lang.reflect.Constructor;public class test2 {

    /**

     * ###27.05_反射(通过反射获取带参构造方法并使用)

     * Constructor

     * Class类的newInstance()方法是使用该类无参的构造函数创建对象, 如果一个类没有无参的构造函数,

     * 就不能这样创建了,可以调用Class类的getConstructor(String.class,int.class)

     * 方法获取一个指定的构造函数然后再调用Constructor类的newInstance("张三",20)方法创建对象*/

    public static void main(String[] args) throws Exception{

        Class clazz=Class.forName("com.sanmao10.Person");//        Person p=(Person)clazz.newInstance();    //通过无参构造创建对象//        p.say();

        Constructor c=clazz.getConstructor(String.class,int.class);//获取有参构造

        Person p=(Person) c.newInstance("sanmao",12);    //通过有参构造创建对象

        p.say();

    }

}

java 反射给对象中的集合赋值

Field中的方法

void

set(Object obj, Object value)

将指定对象变量上此 Field 对象表示的字段设置为指定的新值

假如类Student中有一个name的String属性,

处理反射出来后,Field field对应的就是该name属性。

那么,你如果把Student对象stu中的name设置为“my_name",则只需要

field.set(stu,"my_name");即可

这样就能把stu.name设置为"my_name"

java中怎么动态的给类的属性赋值

利用java的反射机制可以做到:

Object instance = beanClass.newInstance();//beanClass自定义class

Method setJobName = beanClass.getMethod("setJobName", String.class);

method.invoke(instance, "Super Cool Job");//开始设置值。

java 中 父类写初始化代码 反射获取类中的所有属性 并按照某种逻辑赋值(我是为了初始化Spring中的Bean)

这种想法是不可能实现的,父类中是获取不到子类的属性的,你需要换一个思路解决问题。

关于java反射给属性进行赋值的问题!

Field[] fields = per1.getClass().getFields();

这句只能取到声明为public的属性,而你的name,age都是使用默认的private属性。

所以取出来的fields为空。

String newvalue = oldvalue.replaceAll("小红", "小白");

这句代码不知是不是你手误了,不存在小红,就不可能转变为小白。

关于java中反射给属性赋值和java反射 给属性赋值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。