我希望有一个方法将Object作为参数,并将其添加到arraylist。后来,我想在这个对象上调用一个方法,但是在时间上,我不想将对象定义为特定类型,只需键入Object即可。我知道该对象包含我想调用的方法,因为我确保只使用该方法传递对象。像这样:
public void addElement(Object obj){
elementlist.add(obj);
}
.
.
.
elementlist.get(i).SomeMethodIknowItHas();
但是,这不起作用。有什么方法可以强迫它调用该方法吗?
答案 0 :(得分:1)
施展它:
((YourObject)element.get(i)).someMethodYouKnowItHas()
另一种方法是将您的底层集合作为泛型类型:
class YourClass {
List<YourObject> elementList = new ArrayList<YourObject>();
...
public void addElement( Object obj ) {
elementList.add( ( YourObject ) obj );
}
public void someWhereElse() {
elementList.get(i).operationOne();
elementList.get(i).operationTwo();
elementList.get(i).operationThree();
}
...
}
不确定你的情况是否合理
答案 1 :(得分:1)
如果您真的不想将对象转换为特定类型,则必须使用反射。
http://java.sun.com/developer/technicalArticles/ALT/Reflection/
但是,这通常被认为是不好的做法,您应该看看是否有某种方法可以将泛型用于接口或基类。你“知道它有”这样的方法的事实告诉我它应该实现一个接口,告诉编译器它有这种方法。
答案 2 :(得分:1)
您可能知道您向ArrayList添加了某种类型的对象并且它位于特定索引处。但是,Java没有。您需要指定ArrayList中的所有内容都是特定类型(或扩展特定的calss,或实现特定的接口),或者您需要将对象强制转换为您知道的类型(并且还要确保什么都没有打破,处理不符合你预期的情况。)