java反射给字段赋值就是给实体类的set赋值,怎么做?

这个只能获取到get方法用set方法时会报错!java.lang.reflect.Methodmethod=StudentsOnDisplay.class.getDecl... 这个只能获取到get方法用set方法时会报错!
java.lang.reflect.Method method =
StudentsOnDisplay.class.getDeclaredMethod("getWorks" + i);
// 调用方法
Object obj = method.invoke(new StudentsOnDisplay());
展开
 我来答
pieryon
2015-01-06 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14411 获赞数:166867
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
亲,以下是我写的例子,你可以参考:
import java.lang.reflect.Field;
import java.util.Arrays;
import static java.lang.System.out;

enum Tweedle { DEE, DUM }

public class Book {
public long chapters = 0;
public String[] characters = { "Alice", "White Rabbit" };
public Tweedle twin = Tweedle.DEE;

public static void main(String... args) {
Book book = new Book();
String fmt = "%6S: %-12s = %s%n";

try {
Class<?> c = book.getClass();

Field chap = c.getDeclaredField("chapters");
out.format(fmt, "before", "chapters", book.chapters);
chap.setLong(book, 12);
out.format(fmt, "after", "chapters", chap.getLong(book));

Field chars = c.getDeclaredField("characters");
out.format(fmt, "before", "characters",
Arrays.asList(book.characters));
String[] newChars = { "Queen", "King" };
chars.set(book, newChars);
out.format(fmt, "after", "characters",
Arrays.asList(book.characters));

Field t = c.getDeclaredField("twin");
out.format(fmt, "before", "twin", book.twin);
t.set(book, Tweedle.DUM);
out.format(fmt, "after", "twin", t.get(book));

// production code should handle these exceptions more gracefully
} catch (NoSuchFieldException x) {
x.printStackTrace();
} catch (IllegalAccessException x) {
x.printStackTrace();
}
}
}

输出:
BEFORE: chapters = 0
AFTER: chapters = 12
BEFORE: characters = [Alice, White Rabbit]
AFTER: characters = [Queen, King]
BEFORE: twin = DEE
AFTER: twin = DUM

如果对你有帮助的话,请采纳一下。如果有任何问题,都可以联系我!
追问
实体类里面的字段都是private,只能用set方法来赋值。。
追答
好的
夜色无边0001
推荐于2016-05-22 · TA获得超过127个赞
知道小有建树答主
回答量:108
采纳率:100%
帮助的人:42.3万
展开全部
package com.test;

import java.lang.reflect.Field;

public class A {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public static void main(String[] args) {
try{
Class<A> c=A.class;
Field field= c.getDeclaredField("name");//获取字段
Object obj=c.newInstance();//实例化对象
field.set(obj, "aaa");//为字段赋值
System.out.println(field.get(obj));
}catch(Exception e){
e.printStackTrace();
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jpsbbt
推荐于2017-11-27 · TA获得超过1548个赞
知道小有建树答主
回答量:1060
采纳率:100%
帮助的人:537万
展开全部
  1. 可否贴出报错信息?

  2. 可否把你导致报错的源码贴出来?

  3. 可否把StudentsOnDisplay类的set方法源码贴出来?

更多追问追答
追问
StudentsOnDisplay类的set方法
就是一个私有方法的set方法没有其它的操作。

报错内容提示class.getDeclaredMethod("setWorks" + i);有异常,。。
追答
私有方法的话,调用前要设置访问权限:method.setAccessible(true);
不过我很奇怪,set方法一般是对外开放的,为啥要设为私有的呢。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
longxinwu888
2015-07-23 · TA获得超过134个赞
知道小有建树答主
回答量:171
采纳率:100%
帮助的人:102万
展开全部
java反射只能取值 不能赋值
追问
可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
婧失忆
2015-01-06 · TA获得超过203个赞
知道答主
回答量:190
采纳率:0%
帮助的人:79.3万
展开全部
报什么错?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式