Java反射3-7自由编程
来源:3-5 Field类的概述和使用
qq_慕UI0173712
2019-08-06 10:14:32
这是Book类:
package com.winking.fanshe;
public class Book {
private int num;
private String name;
public float price;
public Book() {
super();
}
public Book(int num, String name, float price) {
super();
this.num = num;
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Book [num=" + num + ", name=" + name + ", price=" + price + "]";
}
}这是测试类:
package com.winking.fanshe;
import java.lang.reflect.Field;
import org.junit.Test;
public class FrieldTest {
/**
* 获取私有属性并操作
* @throws Exception
*/
// @Test
// public void setnum() throws Exception {
// //获得class
// Class class1 = Class.forName("com.winking.fanshe.Book");
// //获得私有属性
// Field field =class1.getDeclaredField("name");
// //属性操作
// Book b=(Book) class1.newInstance();
// //私有属性,需要设置一个可以访问的权限
// field.setAccessible(true);
// field.set(b, "只能陪你走一程");
// System.out.println(b);
//
// }
/**
* 获取公有属性并操作
* @throws Exception
*/
@Test
public void setprice() throws Exception {
//获得class
Class class1 = Class.forName("com.winking.fanshe.Book");
//获得私有属性
Field field1 =class1.getField("price");
//属性操作
Book b1=(Book) class1.newInstance();
field1.set(b1,12.0);
Object obj= field1.get(b1);
System.out.println(obj);
}
}问题:但是在运行获取公有属性并操作的时候,会报错,什么原因呢?

1回答
同学你好,报错信息如下:

不能设置float属性为Double类型。
在Book类中,price是float类型,但是在测试时设置属性值为12.0,默认是double类型的,所以报错,这里应该为12.0f。
如:

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题