★★100分★★关于java编程的难题 大家帮下忙

遇到个问题大家不要问我为什么不用另外的方法程序到此要改改动太大是这样的:classAA{Stringaa="helloworld"publicvoidsetAa(Stri... 遇到个问题 大家不要问我为什么不用另外的方法
程序到此要改 改动太大
是这样的:

class AA{
String aa="helloworld"
public void setAa(String aa) {
this.aa = aa;
}
public String getAa() {
return aa;
}
}

//上面的就是一个普通的类AA 有一个属性叫aa

class MAIN{
public static void main(String[] args){

Object obj=new AAA();
//问题在这里 我不知道如何写了
}
}

前提:obj已经多态了
要求: 需要对obj进行操作 来达到更改AAA.aa属性
意思是
比如 obj.setAa("bb"); <--这样就改变了属性的值
但是大家知道这不可能 因为obj没有set方法
那这样我如何 set aa属性呢?

强调一下 只能对obj操作

顺便问一下 这些jar包能实现吗?
PropertyUtils?Properties?呢
不好意思 啊 看来是我没说详细
我真正遇到的问题是
int a=?; <-- 0<a<7
Object obj=null
switch (a) {
case 1:obj=new One();break;
case 2:obj=new Two();break;
case 3:obj=new Three();break;
case 4:obj=new Four();break;
case 5:obj=new Five();break;
case 6:obj=new Six();break;
}

所以说obj new的是谁 我也不知道
但是他们这6个类都有个共同有个属性 叫aa 和setAa()方法

换句话说

Object obj=new ????();

!!!!要强调的是 不能改程序 只能对obj操作!!!!
!!!!楼下的 我补充了 不能确定 new的是个固定类!!!
!!!所以 无法强制转换!!!
展开
 我来答
zxub999
2008-11-28 · TA获得超过310个赞
知道小有建树答主
回答量:320
采纳率:0%
帮助的人:307万
展开全部
这个时候当然是用反射了,不过你这种有同样方法的最好是用接口或抽象类去做。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Object obj=new AA();
Method m = obj.getClass().getMethod("setAa",String.class);
m.invoke(obj, "aaa");
System.out.println(obj.getClass().getMethod("getAa").invoke(obj, null));
}
}
百度网友635e5d4
2008-11-27 · TA获得超过1488个赞
知道小有建树答主
回答量:183
采纳率:0%
帮助的人:0
展开全部
可以设个基类
class Father{
private String aa;

public void setAa(String aa){
this.aa=aa;
}
}
然后One、Two等其它类都继承这个类

最后,
Father aa=null;
switch (a) {
case 1:aa=new One();break;
case 2:aa=new Two();break;
case 3:aa=new Three();break;
case 4:aa=new Four();break;
case 5:aa=new Five();break;
case 6:aa=new Six();break;
}

aa.setAa("bb");
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cheng5546
2008-11-27 · TA获得超过719个赞
知道答主
回答量:203
采纳率:0%
帮助的人:167万
展开全部
这样就行了
class AAA {
String aa = "helloworld";

public void setAa(String aa) {
this.aa = aa;
System.out.println(aa);
}

public String getAa() {
return aa;
}

}

// 上面的就是一个普通的类AA 有一个属性叫aa

public class AAAAA {
public static void main(String[] args) {

Object obj = new AAA();
AAA c=(AAA)obj;
c.setAa("bb");

// 问题在这里 我不知道如何写了
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzj203355
2008-11-27 · TA获得超过2022个赞
知道小有建树答主
回答量:3147
采纳率:100%
帮助的人:1015万
展开全部
Object obj=new AA();
AA a=(AA)obj; //这里 你随便拆箱啊
a.setAa()...
不知道你要表达的是不是这个意思
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ldx0531
2008-11-27 · TA获得超过860个赞
知道答主
回答量:106
采纳率:0%
帮助的人:77.6万
展开全部
如果每个类的方法确实一样,可以使用反射: 如下,

___
try {
Method m = obj.getClass().getMethod("setAa", String.class);
m.invoke(obj, new Object[]{"The value to set"});
} catch (Exception e) {
e.printStackTrace();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
岑行柏3204
2008-11-27 · TA获得超过2435个赞
知道大有可为答主
回答量:1549
采纳率:0%
帮助的人:1327万
展开全部
办法是有的,只是看上去有点笨的办法!不过楼主不用多态解决这种问题着实让人不明白,呵呵~~这么好的机制没给用起来太对不住JAVA了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式