Java 按顺序存储不同种类的对象,并根据它们的属性使用它们
我已经看到一个人可以使用Java 按顺序存储不同种类的对象,并根据它们的属性使用它们,java,arraylist,Java,Arraylist,我已经看到一个人可以使用 ArrayList objectList=new ArrayList() 以生成可能包含不同类型对象(例如对象a和对象B)的列表。我也看到了一些答案,州政府可以通过使用 for (Object obj : objectList){ if(obj.getClass() == A.class){ doSomething(); } } 然而,有人提到,这不是一个非常优雅的方法。另一方面,如果使用抽象类或接口,则需要对对象A和对象B使用
ArrayList objectList=new ArrayList()代码>
以生成可能包含不同类型对象(例如对象a和对象B)的列表。我也看到了一些答案,州政府可以通过使用
for (Object obj : objectList){
if(obj.getClass() == A.class){
doSomething();
}
}
然而,有人提到,这不是一个非常优雅的方法。另一方面,如果使用抽象类或接口,则需要对对象A和对象B使用相同的方法。例如,如果A.get()返回一个整数,则B.get()也必须返回一个整数。但我想要的是,使用objectList的方法将对objectList中包含的不同对象执行不同的操作。因此,A.get()可能返回一个整数,B.get()可能返回一个字符串
所以我想问你们的是什么是最好的方法?写“黑客”并不难,但我想写好代码
谢谢。如果您的方法doSomething()
高度依赖对象的类型,您可以将其移动到这些对象并使用接口
public interface Foo {
void doSomething();
}
public class A implements Foo {
public void doSomething() {
// do something
}
}
for (Foo obj : objectList){
obj.doSomething();
}
这在很大程度上取决于在doSomething()
中执行的操作。如果每个对象的情况确实不同,那么这种方法可能有效。如果类似,请尝试仅识别差异并将其封装在如上所示的界面中。像这样吗
public class BaseClass {
public void method() {}
}
二,
三,
四,
公共类客户端{
公共静态void main(字符串[]args){
List obj=new LinkedList();
对象添加(新的ChildOne());
obj.add(newchildtwo());
用于(基本b类:obj){
((基类)b)方法();
}
}
}
我认为可以使用泛型对象,如果您有相同的方法名,请使用instanceof操作符=>if(obj instanceof a)
而不是obj.getClass()==a.class
,请看下面的答案:为什么我对这篇文章的评分为-1?我确实使用了正确的语法,我不只是在我的问题中复制了一些大段代码,我使我的问题很容易理解(你们所有人都立即理解了我的问题)。那怎么了?!Thx.如果方法
未在基类
中实现,则将其设置为抽象类或接口。事实上,我试图使其尽可能简单,是的接口方法是好的不,不是这样的。因为在我的例子中,两个类ChildOne和ChildTwo都返回不同的值(在您的示例中都返回void)。如果它们具有相同的返回类型,则使用print(b.method)
其相同的长度。问题是我必须写一段别人写过的代码,而这段代码不是很好,所以我尽量不让它变得更糟。
public class ChildOne extends BaseClass {
public void method() {
System.out.println("inside ChildOne");
}
}
public class ChildTwo extends BaseClass {
public void method() {
System.out.println("inside ChildTwo");
}
}
public class Client {
public static void main(String[] args) {
List<BaseClass> obj = new LinkedList<>();
obj.add(new ChildOne());
obj.add(new ChildTwo());
for (BaseClass b : obj) {
((BaseClass) b).method();
}
}
}