为什么我不能在不同包中设置来自类似类的对象列表



我有2个类似的类,具有相同的字段,但它们位于不同的软件包中。走上源A类并复制数据后,Java不允许我调用目标B类上的设置方法以将数据从A传输到B。

public class A { //reside in package A
    public List<QuestionTemplate> qTemplateList;
}
public class QuestionTemplate { //reside in package A
    public List<QuestionList> qList;
}
public class QuestionList { //reside in package A
    public String questionText;
    public String questionChoice;
}

public class B { //reside in package B
    public List<QuestionTemplate> qTemplateList;
}
public class QuestionTemplate { //reside in package B
    public List<QuestionList> qList;
}
public class QuestionList { //reside in package B
    public String questionText;
    public String questionChoice;
} 

我尝试步行" A类列表"并收集数据并创建了ListCopy。然后调用B类集方法,然后发送刚从类创建的listCopy。

A a = new A();
..
List<QuestionTemplate> templateListCopy = new LinkedList<>();
for (QuestionTemplate template : a.qTemplateList) {
    List<QuestionList> questionListCopy = new LinkedList<>();
    for (QuestionList question : template.qList) {
        QuestionList questionCopy = new QuestionList();
        questionCopy.questionText = question.questionText;
        questionCopy.questionChoice = question.questionChoice;
        questionListCopy.add(questionCopy);
    }
    QuestionTemplate questionTemplateCopy = new QuestionTemplate();
    questionTemplateCopy.qList = questionListCopy;
    templateListCopy.add(questionTemplateCopy);
}
B b = new B();
b.setQuestionTemplates(templateListCopy); // error on this line: 

错误是:

setQuestionTemplates(List<A.QuestionTemplate>) in class A cannot be applied to (List<B.QuestionTemplate>)

现在该怎么办?

您必须从软件包b中删除问题清单和QueitalTemplate,然后在B类中,您必须从软件包A。

如果要创建类似类的集合,我建议您阅读有关多态性的信息:(

示例

像 @ luk2302一样,您应该创建类QueitalTemplate,然后实现两个类。

  • 首先:

    QueitalTemplatea扩展了QueitalPlate

  • 第二:

    QuestionTemplateB扩展了QueitalTemplate

,您可以创建QueitalTemplate的新集合,您可以将两个类放置在其中

List<QuestionTemplate> list = new ArrayList<>();
QuestionTemplateA a = new QuestionTemplateA();
QuestionTemplateB b = new QuestionTemplateB();
list.add(a);
list.add(b);

最新更新