2 lirui874125 lirui874125 于 2014.09.04 09:16 提问

java方面:private属性,没有set方法,只有get方法,如何给这个属性赋值?

如题;

public class Foo {

private String readwrite;   // with getter and setter
private String readonly;    // with getter

public String getReadwrite() {
    return readwrite;
}

public void setReadwrite(String readwrite) {
    this.readwrite = readwrite;
}

public String getReadonly() {
    return readonly;
}

}

当我在其他类中调用Foo时,想给其readonly赋值,怎么办?

8个回答

three_man
three_man   2014.10.21 12:39
已采纳

用反射吧,然后设置setAccessible为true就可以了,如下:
public class Test {

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

}

c920816698
c920816698   2014.09.04 10:48

在构造方法里赋值
//构造方法
public Foo(String readonly){
this.readonly = readonly;
}

//调用
new Foo("readonly");

lirui874125
lirui874125   2014.09.04 15:06

扩展包JODD可以,不对Foo进行任何修改

hongjinusa
hongjinusa   2014.09.13 09:03

我觉得这应该是去面试时,人家提出的问题。写一个构成(constructor)的办法是对的。

ck504323276
ck504323276   2014.09.04 09:22

你这么设计不觉得矛盾么,既然不给set方法,那就是只读的,在foo里就直接赋值。
你又要在别的类中去赋值,那干嘛不给set方法。

foo.readonly="";

yl_suc
yl_suc   2014.09.04 09:47

1.同意楼上的看法,最好是给readonly加一个set方法。如下
public void setReadonly(String readonly) {
this.readonly= readonly;
}
2.你可以写一个别的方法来设置readonly的值(呵呵,还不如给它加set方法)如下:
public void xxxx(String readonly){
this.readonly = readonly;
}

greedisok124567
greedisok124567   2014.09.14 10:46

应该是面试时候问的吧用一个有参数的构造方法赋值就可以了不会连构造方法也不让用吧!
面试问这些稀奇古怪的题其实基本上就是想用你了就是想压你的工资你自己往下降个1000,700的基本上就没问题了

yao309642830
yao309642830   2014.10.16 14:58

反射可以实现
关键是在获得的字段上setAccessible=true

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
反射给没有set方法的属性赋值
public class Test { private String readOnly; public String getReadOnly() {     return readOnly; } public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgument
java中不利用get方法获得私有属性、不利用set方法修改私有属性、通过执行私有方法getName获得私有属性、通过执行私有方法setName更改私有属性name的值
package test; import java.lang.reflect.Field; import java.lang.reflect.Method; class Persion{ private String name="lisi"; private String getName(){ return name; } private void setName(
C# 属性 set与get方法
为了更好的隐藏数据成员,将对数据成员的存储与访问分离开,避免直接访问可能造成的错误,同时又具备使用数据成员的灵活性,我们用到了属性。对于属性的读写我们用到set和get。通过set方法来设置属性,get方法来获取属性。对于属性的读写主要有两种方式: 1、与Java相同。使用纯方法来访问属性。具体代码如下class Student { private string name;
java类中为什么设置set 和get 方法操作属性
样例一: class person {       public String name ;       public String sex ; } 如上这么一个类我们可以对它的实体进行:    起名操作,如     person1.name = "小明";   取名操作,如     person1.name; 样例二: class person{      pri
根据属性名调用set/get方法
/** * @description:根据属性名调用set方法 * @param listingLogDO 对象 * @param propertyName 属性名 * @param qtySum 要插入的值 * @author:POP产品研发部 蒋鹏 * @createTime:2017年5月17日 下午4:40:09 */ private void dynamic
在MyEclipse中批量为属性添加get和set方法
我们编程的好多d
java 私有属性加get/set方法跟直接把属性设置成public有区别吗?
如果仅仅是图中的例子,那么你说的这两种方式是没什么区别的。外部调用的结果都可以对属性进行读取与修改。 但是这个例子只是展示了一个常规的私有属性与 get/set 方法的使用模式,仅仅从这个例子中看不出来这个模式有什么好处。实际上,公共属性与私有属性的使用,还是有很大区别的: 如果一个属性是 public,那么外部可以直接对这个属性进行读取与修改;如果一个属性是 private,那么
关于继承里面子类get/set方法的小总结
/** 编写Computer类,包含CPU、内存、硬盘等属性,getDetails方法用于返回Computer的详细信息 编写PC子类,继承Computer类,添加特有属性和方法 编写NotePad子类,继承Computer类,添加特有属性和方法 编写Test类,在main方法中创建PC和NotePad对象,分别访问对象中特有的属性、方法,以及从Computer类继承的属性和方法并打印输出。 */
Java---通过属性名反射获取get和set方法
最近有此需求:拿到name,需要执行setName()方法,这里记录一下,可以当做工具类直接使用:package test; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.math.BigDecimal; i...
OC学习之属性关键字以及set和get方法
//属性的属性分为三大类 //1.读写性控制 //》readOnly只读 只会生成get方法 不会生成set方法 //》readwrite可读可写 会生成set方法 也会生成get方法(默认设置) //> setter =aa:(需要加冒号)重新设置set方法名称  名称将会变成后边写得名称 aa前没有set //getter =bb(不需要加冒号)重新设置get方法名称 名称就是重新设