java - 从集合类及其存储的对象中获取 StackOverflowError。有没有人有过类似的困境?

标签 java arraylist stack-overflow

我正在完成命令设计模式作业,但遇到了 StackOverflowError。我查看了错误附带的 < init >,它说它与我的构造函数有关。

我和我的教授已经检查过了,我们似乎找不到问题。也许多一双眼睛就能解决问题。

编译程序:

线程“main”中的异常 java.lang.StackOverflowError

at Command.AyyTacoMenu.addItem(AyyTacoMenu.java:39)
at Command.AyyTacoMenu.<init>(AyyTacoMenu.java:13)
at Command.AyyTacoItem.<init>(AyyTacoItem.java:8)
at Command.AyyTacoMenu.addItem(AyyTacoMenu.java:39)
at Command.AyyTacoMenu.<init>(AyyTacoMenu.java:13)
at Command.AyyTacoItem.<init>(AyyTacoItem.java:8)
at Command.AyyTacoMenu.addItem(AyyTacoMenu.java:39)...

集合类代码:

package Command;

import java.util.ArrayList;
import java.util.*;

public class AyyTacoMenu {
    private ArrayList<AyyTacoItem> atmenu;

    public AyyTacoMenu() {
        atmenu = new ArrayList<AyyTacoItem>();

        // System.out.println("Menu has been set to ArrayList of type AyyTacoItem");
        addItem("235", "Breakfast Enchillada", 10.00);
        addItem("236", "Burrito Bowl", 8.00);
        System.out.println("Items added");
    }

    public int size() {
        // TODO Auto-generated method stub
        return atmenu.size();
    }

    public void addItem(String i, String n, double p) {
        AyyTacoItem x = new AyyTacoItem(i, n, p);
        atmenu.add(x);
    }

    public AyyTacoItem get(int i) {
        // TODO Auto-generated method stub
        return atmenu.get(i);
    }

}

项目类别代码:

package Command;

public class AyyTacoItem extends AyyTacoMenu {
    private String iD;
    private String name;
    private double price;

    protected AyyTacoItem(String i, String n, double p){
        System.out.println("Item being Added");
        iD = i;
        name = n;
        price = p;
        System.out.println("Item Added");
    }

    protected String getID() {
        return this.iD;
    }

    protected String getName() {
        return this.name;
    }

    protected double getPrice() {
        return this.price;
    }

    public String toString() {
        String x;
        x = ((this.iD) + " | " + (this.name) + " | $" + (this.price));
        return x;
    }

}

预先感谢您的帮助!

最佳答案

public class AyyTacoItem extends AyyTacoMenu

AyyTacoItem 不应扩展 AyyTacoMenu。否则在构造派生类AyyTacoItem时必须构造基类AyyTacoMenu,而AyyTacoMenu的构造函数试图构造另一个AyyTacoItem,这会导致无限递归。

关于java - 从集合类及其存储的对象中获取 StackOverflowError。有没有人有过类似的困境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29762739/

相关文章:

java - Hashmap 到 ArrayList 的 For 循环未保存正确的值。怎么修?

android - ArrayList 突然变为 null,以前不是 null

memory - 与 Java 7 相比,运行相同递归代码的相同线程在 Java 8 中似乎消耗更多的堆栈内存

java - 如何通过快速排序算法实现避免堆栈溢出错误

java - 暴力破解 - StackOverflowError

java - Windows 更新后 DecimalFormat 无法正常工作

java - 简单的java麻烦

java - jmh:同时运行基准测试

java - ANDROID:如何让应用程序将所有错误日志记录在数据库中?

java - 使用 ArrayList 时整数不会增加