有一个基类,叫做A
他有几个子类,A1,A2,A3,...
现在有一个函数叫做
do(A a);
然后他会对应某一种特定的子类来进行do(A1 a1)或者do(A2 a2)等等。
于是我在do(A a)中就要写
{
if (a instanceof A1) do((A1)a);
if (a instanceof A2) do((A2)a);
...
}
这样好麻烦。有没有好的方法?
我试过用Class类的cast方法,但是转换出来要求Class的泛型是要求的类,否则也转换出来是Object或者A,不是某一个Ai。
还是我没做对?
他有几个子类,A1,A2,A3,...
现在有一个函数叫做
do(A a);
然后他会对应某一种特定的子类来进行do(A1 a1)或者do(A2 a2)等等。
于是我在do(A a)中就要写
{
if (a instanceof A1) do((A1)a);
if (a instanceof A2) do((A2)a);
...
}
这样好麻烦。有没有好的方法?
我试过用Class类的cast方法,但是转换出来要求Class的泛型是要求的类,否则也转换出来是Object或者A,不是某一个Ai。
还是我没做对?
不太清楚问题背景,是否是使用函数返回类型转换的结果,可以在说明一点。
void do(A a) {
if (a instanceof A1) do((A1)a);
if (a instanceof A2) do((A2)a);
if (a instanceof A3) do((A3)a);
...
}void do(A1 a1) {
对A1做一些事情,这里要用一些A1里面的东西,是A所不能提供的
}void do(A2 a2) {
}...如果只是要知道a的类型的话,可以做到。但是要把a转换成对应的类型就有点困难了。
显然楼主对JAVA的面向对象的继承,还是不熟悉.这是典型的多态(
看到那么多的 if (a instanceof X)通常都很可能有问题 )参考代码:
class A
{
public void doA(A a)
{
a.doA(a);//只要这一条语句就行了,不要那么多的IF语句
}
}class A1 extends A
{
public void doA(A a)
{
if(!(a instanceof A1))return;
A1 a1=(A1)a; //要这样强转回你自己的类型,就可以访问你自己特殊的数据了
a1.methodA1();//A1自己独有的方法与数据
}
private void methodA1()
{
System.out.println("A1自己独有的方法与数据");
}
}class A2 extends A
{
public void doA(A a)
{
if(!(a instanceof A2))return;
A2 a2=(A2)a; //要这样强转回你自己的类型,就可以访问你自己特殊的数据了
a2.methodA2();//A2自己独有的方法与数据
}
private void methodA2()
{
System.out.println("A2自己独有的方法与数据");
}
}
public class Test12 {
public static void main(String[] args) {
// TODO Auto-generated method stub
A a=new A();
a.doA(new A1());
a.doA(new A2());
}}
程序运行结果:
A1自己独有的方法与数据
A2自己独有的方法与数据
这是我的一个小例子,只是给个参考
package exsample;
class A
{
public void doA()
{
System.out.println("这是基类的函数");
}
}class A1 extends A
{
public void doA()
{
System.out.println("这是A1类的函数");
}
}class A2 extends A
{
public void doA()
{
System.out.println("这是A2类的函数");
}}
public class Test {
public static void main(String[] args){
A [] obj = {new A(),new A1(),new A2()};
for(int i=0;i<obj.length;i++)
obj[i].doA();
}
}
运行结果如下:
这是基类的函数
这是A1类的函数
这是A2类的函数
然后进行初始化,用class对象或类字面常量,略了,这样你就可以用一个for循环,types[i].isInstance(o);
你可以参考java编程思想