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);
		
	}

}

问题:但是在运行获取公有属性并操作的时候,会报错,什么原因呢?

http://img.mukewang.com/climg/5d48e26b000173d817410999.jpg

写回答

1回答

好帮手慕阿满

2019-08-06

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

http://img.mukewang.com/climg/5d48f39b000121cc06190116.jpg

不能设置float属性为Double类型。

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

如:

http://img.mukewang.com/climg/5d48f4730001448504260117.jpg

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

0

0 学习 · 8016 问题

查看课程