开发者社区> 问答> 正文

private修饰属性没有set只有get方法如何给这个属性赋值

private属性,没有set方法,只有get方法,如何给这个属性赋值?
screenshot
当我在其他类中调用Foo时,想给其readonly赋值,怎么办?

展开
收起
蛮大人123 2016-02-20 16:03:38 4218 0
3 条回答
写回答
取消 提交回答
  • 首先这个api的设计者不希望你去改这个属性,如果真想改,需要通过反射实现: import java.lang.reflect.Field; public class Test { public static void main(String[] args) throws Exception { Person p = new Person(); Field f = p.getClass().getField("age"); f.setAccessible(true); f.set(p, 12); } public static class Person { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } } }
    2019-07-17 18:45:26
    赞同 展开评论 打赏
  • java反射搞起来

    2019-07-17 18:45:26
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    用反射,然后设置setAccessible为true就可以了,如下:

    private String readOnly;
    public String getReadOnly() {
        return readOnly;
    }
    public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
        Test t = new Test();
        Field f = t.getClass().getDeclaredField("readOnly");
        f.setAccessible(true);
        f.set(t, "test");
        System.out.println(t.getReadOnly());
    }
    2019-07-17 18:45:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载