通过反射 修改访问和修改属性的值 Day25

package com.sxt.field;
/*
 * 通过反射拿到属性值
 *       修改public属性值
 *       修改private属性值
 * 缺点:可读性差;代码复杂
 * 优点:灵活;可以访问修改private属性值
 * 以后多运用setXxx getXxx 修改属性的值
 */
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class TestField {
    public static void main(String[] args) throws Exception {
        //设置私有属性值
        Class<?> class1 = Class.forName("com.sxt.entity.Student");
        //创建对象
        Object obj = class1.newInstance();
        Field[] fields = class1.getDeclaredFields();
        //遍历所有属性
        for(Field f : fields){
            System.out.println(f.getName()+"\t"+Modifier.toString(f.getModifiers()));
        }
        System.out.println("----------------------------------");

        //修改public的score的属性值
        Field field1 = class1.getDeclaredField("score");
        //直接通过方法(基本数据类型)
        field1.setDouble(obj, 99.9);
        double d = field1.getDouble(obj);
        System.out.println(d);

        System.out.println("----------------------------------");

        //拿到private的name的属性值
        Field field2 = class1.getDeclaredField("name");
        System.out.println(field2.getName() +" "+ Modifier.toString(field2.getModifiers()));
        //可以改变私有属性值
        field2.setAccessible(true);
        field2.set(obj, "小明");
        Object object = field2.get(obj);
        System.out.println(object);
    }
}
时间: 2024-10-19 15:01:48

通过反射 修改访问和修改属性的值 Day25的相关文章

通过反射把一个类的属性的值赋值给另一个类

两个类我就不创建了,具体实现方法如下: /// <summary> /// 通过反射把一个类的属性的值赋值给另一个类 /// </summary> /// <typeparam name="D"></typeparam> /// <typeparam name="S"></typeparam> /// <param name="s"></param>

通过反射机制修改类中的私有属性的值

实现步骤: 1.首先创建一个类包含一个私有属性 public class PrivateTest { private String name = "hello"; public String getName() { return name; } } 2.通过反射机制修改name的值 import java.lang.reflect.Field; public class ReflectionTest { public static void main(String[] args) th

泛型约束和利用反射修改对象属性的值

周日了都,昨天休息了一天,今天想想得敲敲代码练习一下,如下关于泛型约束和利用反射修改对象属性的值的, 都挺简单的,呵呵,但时间一长,不经常使用还容易忘记在此就当记录一下了, 首先泛型代码一般是如下的情形: 加了泛型约束,只允许引用类型并且是只能是无参数的构造函数的类型才能传入,也就是不允许给类构造参数传递实参,否则将报错. 错误 1 “XXXXXX.pros”必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法“ 1 public static T GetObject<T>(T

Java通过反射机制修改类中的私有属性的值

首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username的值: //创建一个类的对象 PrivateField privateField = new PrivateField(); //获取对象的Class Class<?> classType = privateField.getClass(); //获取指定名字的私有域 Field field =

C# 操作 Word 修改word的高级属性中的自定义属性

word的类库使用的是word2007版本的类库,类库信息见下面图片,折腾了半天,终于找到入口,网上 很多说的添加或者修改word的高级属性中的自定义属性都是错误的,感觉都是在copy网上的代码,自己终于摸索成功了,Mark下. 直接上代码,代码如下: [csharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.

在使用shape的同时,用代码修改shape的颜色属性

Android里面经常会使用shape来定制一些View的背景 可以修改View的背景颜色,形状等属性 一般情况下,shape都是在xml文件里面写死了,今天遇到一个需求,View的形状是圆角的,但是颜色是在代码里面设置的 最开始的思路是先在代码里给View设置颜色,再在shape里面设置solid属性为透明色 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="htt

iOS TableViewController内修改TableView的style属性

1. TableView的style属性默认为只读(readonly)属性, 一般在创建TableViewController时设置: UITableViewController *tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; TableView样式为: 2. 若要在TableViewController内修改TableView的style属性, 需进行如下设置

查询或修改文件的创建、访问、修改等时间戳信息

查询或修改文件的创建.访问.修改等时间戳信息.(作者写了一个命令程序以支持这些操作,程序下载链接:http://down.51cto.com/data/2286646) 这是一个命令程序,需要获取命令行参数才可以工作.命令帮助信息如下: setfiletime 文件时间戳修改命令. setfiletime [-q type] | [-s sametime] | [[-c createtime] [-aaccesstime] [-w wri tetime]] | [-h] | [-0] | [-1

使用vscode访问和修改远程计算机文件

使用vscode访问和修改远程文件,分三步实现:在远程linux机器上安装rmate:在本地windows上安装openssh:在vscode中安装扩展remote vscode. 1. 在远程linux机器上安装rmate rmate有很多中语言版本,这里用的是python的版本.github地址:https://github.com/sclukey/rmate-python 下载安装比较简单,在linux中执行以下命令即可 wget https://raw.githubusercontent