繁体   English   中英

如何在另一个列表对象内添加对象

[英]How to Add an Object Inside Another List Object

我有一个对象类A,以及一个类B的列表对象

A a = a.findById(aId);
List<B> b = b.findById(bId);

B班有A

public class B {
   private int id;
   private A a;
   ...getters setters
}

是否可以添加对象a在对象列表b

我得到的错误,当我尝试添加a的对象列表。 b.add(a); 这告诉我将对象a更改为B a...

如何添加对象a列表中的对象b

如果将对象a包装在对象B则可以添加它。 否则,由于类型不匹配,您将无法将类型A对象a添加到B对象的List<B> :您正在尝试将类型A对象添加到B对象的列表中,这在Java中是不允许的。

是否可以添加对象a在对象列表b

简而言之,不,因为它们不是相同的类型。

如何在列表对象b中添加对象a?

为了将A类和BA两个实例都添加到一个集合中,可以采用的一种方法是创建一个同时实现A类和B类的接口。

例:

public interface ISomeInterface {
    // define some methods in which both class `A` and `B` share 
}

然后使这些类实现ISomeInterface接口:

public class A implements ISomeInterface {

}

public class B implements ISomeInterface {
    private int id;
    private A a;
}

那么您可以执行以下操作:

List<ISomeInterface> b = new ArrayList<>();
b.add(new A());
b.add(new B());
// note you can only call methods through which the interface defines
// another solution is to cast the types, that way you can invoke the methods that belong to each type
// make use of instanceof keyword to prevent exception

或根本不需要建立接口:

List<Object> b = new ArrayList<>();
b.add(new A());  //if you want to call the methods of A or B you need to cast it first, remember to use instanceof keyword prior to casting
b.add(new B());

将A添加到B的语法将是首先获取B,然后将A添加到B,例如

A a = new A();
B b = new B();

b.add(A);

如果您希望将它们都添加到相同的List<>则它们需要实现相同或从相同的类继承,例如接口IAB

List<IAB> list = new ArrayList<>();

list.add(new A());
list.add(new B());

鉴于

public interface IAB{}
public class A implements IAB{}
public class B implements IAB();

请注意,在这种情况下,除非将其强制转换为类,否则只能调用接口上可用的方法(但是,如果将A和B混合使用,可能很难处理)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM