以superClass为参数,操作subClasses的方法
Method That Takes Super Class As Parameter And Manipulates Sub Classes
我有 class "A",它有两个 class 对象的数组列表 "BC" 和 "BD"。 BC和BD继承自抽象class"B".
所以我正在努力做的是,我想做一个 add();方法以B对象为参数,如果参数是BC类型则添加BC对象,如果参数是BD类型则添加BD对象。是否有正确的方法来执行此操作,或者我应该单独添加方法?
public class A
{
private ArrayList<BC> bcArrayList= new ArrayList<>();
private ArrayList<BD> bcArrayList= new ArrayList<>();
public void add(ArrayList<B> bArrayList)
{
//m = create new object of type, either BC or BD;
bArrayList.add(m);
}
}
尝试使用 getClass 方法,即 m.getClass()。
如果你真的需要这样做,那么我想你可以这样做:
public class A {
private List<B> bcArrayList = new ArrayList<>();
private List<B> bdArrayList = new ArrayList<>();
public void add(List<B> bArrayList) {
for (B item : bArrayList){
if (item.getClass() == BC.class) {
bcArrayList.add(item);
} else if (item.getClass() == BD.class){
bdArrayList.add(item);
}
}
}
}
也就是说,你确定你真的需要它吗?
为什么不将它们放在同一个列表中(它们都是 B
类型的对象),并让子类 BC
和 BD
根据需要表现不同。这就是多态性的意义所在。
我认为最安全的方法是使用 instanceof 运算符。
public class A
{
private ArrayList<BC> bcArrayList= new ArrayList<>();
private ArrayList<BD> bdArrayList= new ArrayList<>();
public void add(ArrayList<B> bArrayList) {
for(B element : bArrayList) {
if(element instanceof BC) {
bcArrayList.add((BC) element);
} else if (element instanceof BD) {
bdArrayList.add((BD) element);
} else {
continue;
}
}
}
}
我认为,如果您想从列表中添加多个对象,那么可以使用一种采用 List<B>
并使用 instanceof
的方法
public void add(List<B> bList) {
for (B b : bList) {
if (b instanceof BC) {
bcArrayList.add((BC)b);
}
if (b instanceof BD) {
bdArrayList.add((BD)b);
}
}
}
但是对于添加单个对象,我认为使用方法重载是最干净的方法
public void add(BC b) {
bcArrayList.add(b);
}
public void add(BD b) {
bdArrayList.add(b);
}
当然你可以将它们全部添加到你的 class 中并像这样使用它们
A a = new A();
a.add(new BC());
a.add(new BD());
List<B> list = new ArrayList<>();
list.add(new BC());
list.add(new BD());
a.add(list);
我有 class "A",它有两个 class 对象的数组列表 "BC" 和 "BD"。 BC和BD继承自抽象class"B".
所以我正在努力做的是,我想做一个 add();方法以B对象为参数,如果参数是BC类型则添加BC对象,如果参数是BD类型则添加BD对象。是否有正确的方法来执行此操作,或者我应该单独添加方法?
public class A
{
private ArrayList<BC> bcArrayList= new ArrayList<>();
private ArrayList<BD> bcArrayList= new ArrayList<>();
public void add(ArrayList<B> bArrayList)
{
//m = create new object of type, either BC or BD;
bArrayList.add(m);
}
}
尝试使用 getClass 方法,即 m.getClass()。
如果你真的需要这样做,那么我想你可以这样做:
public class A {
private List<B> bcArrayList = new ArrayList<>();
private List<B> bdArrayList = new ArrayList<>();
public void add(List<B> bArrayList) {
for (B item : bArrayList){
if (item.getClass() == BC.class) {
bcArrayList.add(item);
} else if (item.getClass() == BD.class){
bdArrayList.add(item);
}
}
}
}
也就是说,你确定你真的需要它吗?
为什么不将它们放在同一个列表中(它们都是 B
类型的对象),并让子类 BC
和 BD
根据需要表现不同。这就是多态性的意义所在。
我认为最安全的方法是使用 instanceof 运算符。
public class A
{
private ArrayList<BC> bcArrayList= new ArrayList<>();
private ArrayList<BD> bdArrayList= new ArrayList<>();
public void add(ArrayList<B> bArrayList) {
for(B element : bArrayList) {
if(element instanceof BC) {
bcArrayList.add((BC) element);
} else if (element instanceof BD) {
bdArrayList.add((BD) element);
} else {
continue;
}
}
}
}
我认为,如果您想从列表中添加多个对象,那么可以使用一种采用 List<B>
并使用 instanceof
public void add(List<B> bList) {
for (B b : bList) {
if (b instanceof BC) {
bcArrayList.add((BC)b);
}
if (b instanceof BD) {
bdArrayList.add((BD)b);
}
}
}
但是对于添加单个对象,我认为使用方法重载是最干净的方法
public void add(BC b) {
bcArrayList.add(b);
}
public void add(BD b) {
bdArrayList.add(b);
}
当然你可以将它们全部添加到你的 class 中并像这样使用它们
A a = new A();
a.add(new BC());
a.add(new BD());
List<B> list = new ArrayList<>();
list.add(new BC());
list.add(new BD());
a.add(list);