我有两个类型为ArrayList<ObjectType1>
和ArrayList<ObjectType2>
的ArrayList。
然后我创建了另一个ArrayList<Object>
,因为对象是每个对象类型的超类。
ArrayList<Object1> obj1 = new ArrayList<Object1>();
ArrayList<Object2> obj2 = new ArrayList<Object2>();
这两个对象类有自己特定的getter和setter方法。
ArrayList<Object> obj3 = new ArrayList<Object>();
obj3.add(obj1);
obj3.add(obj2);
现在当我访问obj3时,我想获取obj1和obj2的getter和setter。??
任何人都可以帮忙解决问题.. ???
答案 0 :(得分:3)
你可以这样做:
ArrayList<MyClass1> obj1 = new ArrayList<MyClass1>();
ArrayList<MyClass2> obj2 = new ArrayList<MyClass2>();
ArrayList<Object> obj3 = new ArrayList<Object>();
obj3.add(obj1);
obj3.add(obj2);
for (int = 0 ; i < obj3.size() ; i++) {
Object obj = obj3.get(i);
if (obj instanceof MyClass1) {
MyClass1 cls1 = (MyClass1)obj;
cls1.get()..//You getters and setters
}
if (obj instanceof MyClass2) {
MyClass2 cls2 = (MyClass2)obj;
cls2.get()..//You getters and setters
}
}
或者您可以更聪明地创建一个界面或抽象类/基类
public Interface Getable {
void getAttrbiute();
}
而不仅仅是在MyClass1,MyClass2中实现。 在这种情况下,您可以在列表上运行而无需执行instaceof检查
ArrayList<MyClass1> obj1 = new ArrayList<MyClass1>();
ArrayList<MyClass2> obj2 = new ArrayList<MyClass2>();
ArrayList<Getable> obj3 = new ArrayList<Getable>();
obj3.add(obj1);
obj3.add(obj2);
for (int = 0 ; i < obj3.size() ; i++) {
Getable objGetable = obj3.get(i);
objGetable.getAttrbiute();
}
希望有所帮助..
答案 1 :(得分:0)
您已经确定将obj3
中的对象作为Object
,而不是其各自的类型。
你可以:
instanceof
提取的每个对象的类型,并在访问getter之前进行适当的转换。这非常讨厌。obj3
列表中的每个对象实施,该列表将定义为ArrayList<MyInterface>
,其中MyInterface
定义您的获取者。从根本上说,这是一个建模问题。通过将所有内容放入Objects
列表中,您可以说您对这些对象的所有了解都是Objects
。相反,您需要在解决方案周围使用polymorphism。
答案 2 :(得分:0)
如果它是一个扩展范围很小的简单对象,你可以使用instanceof
例如
class ObjectType1 {
String getData1() {
return "data 1";
}
}
class ObjectType2 {
String getData2() {
return "data 2";
}
}
private String getData(Object obj) {
if (obj instanceof ObjectType1)
return ((ObjectType1) obj).getData1();
else
return ((ObjectType2) obj).getData2();
}
但是对于良好的编程习惯,请尝试使用接口或抽象 基本接口实现可能看起来像
interface DataHolder{
String getData();
}
class ObjectType1 implements DataHolder {
String getData1() {
return "data 1";
}
public String getData(){
return getData1();
}
}
class ObjectType2 implements DataHolder {
String getData2() {
return "data 2";
}
public String getData(){
return getData2();
}
}
List<DataHolder> dataSet = new ArrayList<DataHolder>();
private void print() {
dataSet.add(new ObjectType1());
dataSet.add(new ObjectType2());
for (DataHolder iHolder : dataSet){
System.out.println(iHolder.getData());
}
}