Java 对象/实例问题?
所以这对我来说是一个相当复杂的问题,但我会尽我所能解释清楚- 我有一门课叫“调查”,内容是: 在我的问题课上,添加一个问题后,我得到1 然而,当我在调查课上打印出尺寸时,我得到了0 我相信这是因为Main使用了一个单独的调查实例来迭代问题列表,而不是在我的问题类中添加问题的实例 我会尽力消除任何困惑Java 对象/实例问题?,java,oop,object,instance,instances,Java,Oop,Object,Instance,Instances,所以这对我来说是一个相当复杂的问题,但我会尽我所能解释清楚- 我有一门课叫“调查”,内容是: 在我的问题课上,添加一个问题后,我得到1 然而,当我在调查课上打印出尺寸时,我得到了0 我相信这是因为Main使用了一个单独的调查实例来迭代问题列表,而不是在我的问题类中添加问题的实例 我会尽力消除任何困惑 您有多个调查实例,其中一个添加了一个问题,而另一个基本上没有问题。就这样 解决方案:只使用一个Survey实例,并在需要时将其传递到需要的位置,但不要创建新实例并期望它保持与其他实例相同的状态,因为
您有多个调查实例,其中一个添加了一个问题,而另一个基本上没有问题。就这样 解决方案:只使用一个Survey实例,并在需要时将其传递到需要的位置,但不要创建新实例并期望它保持与其他实例相同的状态,因为Java不是这样工作的。请注意,问题绝对不应创建调查实例。它可以将自己添加到现有实例中,但从头创建实例是没有意义的 编辑 您在评论中声明:
我就是这么想的!我是个业余爱好者,我努力坚持好的设计。survey.displayQuestions和survey.questions.addthis都需要survey对象来调用这些方法,但我将它们放在不同的类中。我不知道怎么只用一个
我自己的倾向是让问题类不了解调查,换句话说,它不应该持有调查实例,也不应该调用它的任何方法,因为它确实不需要了解调查,而编写OOP程序的目标是最小化连接。相反,无论哪个类创建问题实例,都要将问题放入调查对象。您有多个调查实例,其中一个实例添加了一个问题,而另一个实例基本上没有问题。就这样 解决方案:只使用一个Survey实例,并在需要时将其传递到需要的位置,但不要创建新实例并期望它保持与其他实例相同的状态,因为Java不是这样工作的。请注意,问题绝对不应创建调查实例。它可以将自己添加到现有实例中,但从头创建实例是没有意义的 编辑 您在评论中声明:
我就是这么想的!我是个业余爱好者,我努力坚持好的设计。survey.displayQuestions和survey.questions.addthis都需要survey对象来调用这些方法,但我将它们放在不同的类中。我不知道怎么只用一个
我自己的倾向是让问题类不了解调查,换句话说,它不应该持有调查实例,也不应该调用它的任何方法,因为它确实不需要了解调查,而编写OOP程序的目标是最小化连接。相反,无论是哪个类创建问题实例,都要将问题放入调查对象。您可能需要创建一个新类,返回问题的静态实例。这样,main和question类都可以请求静态列表的副本
在新类中,检查实例是否为null,如果为null,则新建静态实例,然后返回它。根据应用程序的复杂性,您可能需要考虑添加锁定以避免威胁安全问题。您可能需要创建一个新类,返回问题的静态实例。这样,main和question类都可以请求静态列表的副本
在新类中,检查实例是否为null,如果为null,则新建静态实例,然后返回它。根据应用程序的复杂性,您可能希望考虑添加锁定以避免威胁安全问题。这就是我的想法!我是个业余爱好者,我努力坚持好的设计。survey.displayQuestions和survey.questions.addthis都需要survey对象来调用这些方法,但我将它们放在不同的类中。我不知道如何只用一个。非常感谢,我非常感谢!我要试着去做你说的,再次感谢你:这就是我的想法!我是个业余爱好者,我努力坚持好的设计。survey.displayQuestions和survey.questions.addthis都需要survey对象来调用这些方法,但我将它们放在不同的类中。我不知道如何只用一个。非常感谢,我非常感谢!我要试着按照你说的去做,再次感谢:对不起,但我不得不否决这个答案。我们最不想推荐的是OP在不需要静态实例时创建静态实例。如果线程安全是一个问题,而我们完全没有任何迹象表明这一点,那么有更好的方法来解决这个问题,而不是把婴儿和洗澡水一起扔掉。他已经在创建一个静态实例,如果他需要它在主类和问题类之间徘徊,那么将它作为静态存储似乎是完全合理的
列表当然,我们对申请的了解还不够,无法做出决定。对不起,我不得不投票否决这个答案。我们最不想推荐的是OP在不需要静态实例时创建静态实例。如果线程安全是一个问题,而我们完全没有任何迹象表明这一点,那么有更好的方法来解决这个问题,而不是把婴儿和洗澡水一起扔掉。他已经在创建一个静态实例,如果他需要它在主类和问题类之间徘徊,那么将它作为静态存储似乎是完全合理的列表当然,我们对申请的了解还不够,无法做出决定。
ArrayList<Question> questions = new ArrayList<Question>();
survey.questions.size()
public class Survey {
public ArrayList<Question> questions = new ArrayList<Question>();
// Iterate over questions List
public void displayQuestions() {
int numberCount = 1;
int optionCount = 1;
System.out.println(questions.size()); // PRINTS 0
for (int i = 0; i < questions.size(); i++) {
System.out.print("Question" + numberCount + ") ");
System.out.println(questions.get(i).prompt);
for(int j = 0; j < questions.get(i).options.size(); j++) {
System.out.print(optionCount + ". ");
System.out.println(questions.get(i).options.get(j));
}
}
}
public class Main {
private static Survey survey = new Survey();
// After selecting "Display Survey" menu option
survey.displayQuestions();
public class Question {
protected Survey survey = new Survey();
// After finishing making the question
survey.questions.add(this);
System.out.println(survey.questions.size()); // PRINTS 1