如何访问同一接口的不同实现的不同属性
How to access different attributes of different implementation of the same interface
我有接口
public interface Inter {
int interAttr = 0;
}
还有两个 类 实现它,每个都有一个附加属性,每个都有不同的类型。
@AllArgsConstructor
public class Impl1 implements Inter {
public int impl1Attr;
}
@AllArgsConstructor
public class Impl2 implements Inter {
public String impl2Attr;
}
我有 Inter
个对象的列表,它们是 Impl1
和 Impl2
的混合体
public class main {
public static void main(String[] args) {
Impl1 i11 = new Impl1(0);
Impl1 i12 = new Impl1(1);
Impl2 i21 = new Impl2("zero");
Impl2 i22 = new Impl2("one");
List<inter> implList = new ArrayList<Inter>();
implList.add(i11);
implList.add(i12);
implList.add(i21);
implList.add(i22);
for (Inter el : implList){
// this of course works
int a = el.interAttr1;
// But how do I get access to impl1Attr and impl2Attr?
}
}
}
当然我可以在main
的正文中查询i11.impl1Attr
或impl21.impl2Attr
但是有没有办法让我在 for
循环中访问列表中不同实现的属性?
我可能把问题简单化了,但是 instanceof
+ 转换不是一个选项吗?
for (Inter el : implList) {
int a = el.interAttr;
if (el instanceof Impl1)
System.out.println(((Impl1)el).impl1Attr);
if (el instanceof Impl2)
System.out.println(((Impl2)el).impl2Attr);
}
我有接口
public interface Inter {
int interAttr = 0;
}
还有两个 类 实现它,每个都有一个附加属性,每个都有不同的类型。
@AllArgsConstructor
public class Impl1 implements Inter {
public int impl1Attr;
}
@AllArgsConstructor
public class Impl2 implements Inter {
public String impl2Attr;
}
我有 Inter
个对象的列表,它们是 Impl1
和 Impl2
public class main {
public static void main(String[] args) {
Impl1 i11 = new Impl1(0);
Impl1 i12 = new Impl1(1);
Impl2 i21 = new Impl2("zero");
Impl2 i22 = new Impl2("one");
List<inter> implList = new ArrayList<Inter>();
implList.add(i11);
implList.add(i12);
implList.add(i21);
implList.add(i22);
for (Inter el : implList){
// this of course works
int a = el.interAttr1;
// But how do I get access to impl1Attr and impl2Attr?
}
}
}
当然我可以在main
的正文中查询i11.impl1Attr
或impl21.impl2Attr
但是有没有办法让我在 for
循环中访问列表中不同实现的属性?
我可能把问题简单化了,但是 instanceof
+ 转换不是一个选项吗?
for (Inter el : implList) {
int a = el.interAttr;
if (el instanceof Impl1)
System.out.println(((Impl1)el).impl1Attr);
if (el instanceof Impl2)
System.out.println(((Impl2)el).impl2Attr);
}