★★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的是个固定类!!!
!!!所以 无法强制转换!!! 展开
程序到此要改 改动太大
是这样的:
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的是个固定类!!!
!!!所以 无法强制转换!!! 展开
8个回答
展开全部
这个时候当然是用反射了,不过你这种有同样方法的最好是用接口或抽象类去做。
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));
}
}
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));
}
}
展开全部
可以设个基类
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");
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");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样就行了
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");
// 问题在这里 我不知道如何写了
}
}
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");
// 问题在这里 我不知道如何写了
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Object obj=new AA();
AA a=(AA)obj; //这里 你随便拆箱啊
a.setAa()...
不知道你要表达的是不是这个意思
AA a=(AA)obj; //这里 你随便拆箱啊
a.setAa()...
不知道你要表达的是不是这个意思
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果每个类的方法确实一样,可以使用反射: 如下,
___
try {
Method m = obj.getClass().getMethod("setAa", String.class);
m.invoke(obj, new Object[]{"The value to set"});
} catch (Exception e) {
e.printStackTrace();
}
___
try {
Method m = obj.getClass().getMethod("setAa", String.class);
m.invoke(obj, new Object[]{"The value to set"});
} catch (Exception e) {
e.printStackTrace();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
办法是有的,只是看上去有点笨的办法!不过楼主不用多态解决这种问题着实让人不明白,呵呵~~这么好的机制没给用起来太对不住JAVA了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询