我在一个没有setter方法的类中有一个列表变量。有没有办法可以为列表对象设置值。
答案 0 :(得分:3)
如果您在班级本身,如在方法内,并且变量标记为private
,public
或protected
,请使用此项:
m_name = value;
如果该字段为public
,并且您需要在课外访问,请执行以下操作:
classinstance.m_name = value;
当然,如果您需要在类的实例化中构造变量,那么您需要在构造函数中放置列表的实例化代码。然后,你可以使用这样的反射:
import java.lang.reflect.Field;
ClassName classInstance = new ClassName();
Field member_name = classInstance.getClass().getDeclaredField("private_var_name");
// this is for private scope
member_name.setAccessible(true);
variableName.set(x, /*value*/);
当然,我不建议这样做,因为它肯定会打破封装,它看起来更像是一个黑客而不是干净的代码:
(Source)
答案 1 :(得分:0)
当属性为public
时,您可以像这样访问它。当您的属性为protected
时,该类必须与您的类位于同一个包中。
obj.value = newValue;
如果是private
,您可以refelction完成。