我在Zoo.java中实现了一个不继承任何其他类的数组列表,我将为此添加一些对象
ArrayList al = new ArrayList();
al.add(new Cat());
al.add(new Dog());
我无法编写逻辑来告诉我要调用哪种类型的对象,以及不使用继承和泛型而使用该类的方法。
所以我可以在这里使用:
for(Animal a:al)
class <?> X = obj.getClass(a);
((X)a).somemethod();
答案 0 :(得分:1)
您可以创建超类类型的数组列表。
您可以这样做。
ArrayList<Zoo> arrayList=new ArrayList<Zoo>();
答案 1 :(得分:1)
这里要学习的课程是“多态”。
类Cat
和Dog
应该实现一个通用的接口,该接口声明对它们可用的方法:
interface Animal {
void eat(SomeOtherInterface food);
void giveSound(BufferedWriter output);
void move();
}
class Cat implements Animal {
@Override public void eat(SomeOtherInterface food){
// consume the food
}
@Override public void giveSound(BufferedWriter output){
output.write("Meaw");
}
@Override public void move(){
// move within the world
}
}
class Dog implements Animal {
@Override public void eat(SomeOtherInterface food){
// consume the food
}
@Override public void giveSound(BufferedWriter output){
output.write("Woof");
}
@Override public void move(){
// move within the world
}
}
然后为集合提供最通用的通用类型的 generics 参数,以提供您要访问的方法:
Collection<Animal> myAnimals = new ArrayList();
myAnimals.add(new Cat());
myAnimals.add(new Dog());
try( BufferedWriter output = new BufferedWriter(new OutputStreamWriter(System.out))){
for(Animal animal : animals)
animal.giveSound(output);
}
答案 2 :(得分:0)
没有任何<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
<div class="teamColumn"> </div>
检查,没有其他方法可以执行;除非您的instanceOf
有一个定义,该定义说要接受一些通用对象,并且ArrayList::add
和Cat
从此扩展。但是,即使Dog
或Object
还有其他方法,您仍然只能调用Cat
中的方法。您可能会看到为什么在这种情况下泛型如此方便...
答案 3 :(得分:0)
我做了一些工作。要访问数组列表中对象的方法,我们可以使用java.lang.reflect包。
我首先可以获取所有已声明的方法,然后使用参数来调用它们。
所以我的程序将是:
public class Methodcall{
ArrayList <Object> al = new ArrayList<Object>();
al.add(new Cat());
al.add(new Dog());
for(Object a:al)
{
class ax = a.getClass();
Method[] methods=ax.getdeclaredMethods();
for(Method m:methods)
{
System.out.println(method.getName);
}
}
}
}
在此之后,我们可以使用其他反射成员来访问方法。
谢谢大家。