java 类中的递归构造函数调用

pkwftd7m  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(159)
final List<Tags> tags = new ArrayList<>();

    public void startUp() {
        //load tags from Config text box
        reloadTags();
    }

    @Getter
    @ToString
    @EqualsAndHashCode
    static class Tags  
    {
        private final String tag;
        private final String value;

        //recursive error comes from here
        Tags(String tag, String value)  
        {
            this(tag, value);
        }
    }

   //detect change in Config textbox, update tags
    @Subscribe
    public void onConfigChanged(ConfigChanged configChanged) {
        if (configChanged.getGroup().equals("calculatorpro")) {
            reloadTags();
        }
    }

    //clear current Tags list & update with new tags from Config Text box
    private void reloadTags()
    {
        tags.clear();
        tags.addAll(loadTags(config.customTags()));
    }

    //load tags from Config text box
    private Collection<? extends Tags> loadTags(String textbox)
    {
        List<Tags> swaps = new ArrayList<>();
        for (String line : textbox.split("\n"))
        {
            if (line.trim().equals("")) continue;
            String[] split = line.split("=");
            swaps.add(new Tags(
                    split[0].toLowerCase().trim(),
                    split.length > 1 ? split[1].toLowerCase().trim() : ""
            ));
        }
        return swaps;
    }

我得到错误:“java:recursive constructor invocation”from my“static class Tags”class.
我尝试创建一个标签名称和值的列表,这是我从用户文本框(config.customTags())中获得的。它们将以tag=value(oak=255)的形式作为字符串输入。当在文本框中检测到更改时,旧列表将被清除,并使用文本框的新内容创建一个新列表(在函数loadTags中完成)。
代码实际上是由其他人创建的另一个文件,我只是采取了适合我的目的的部分,但实际内容是相同的,但更改了名称,所以我不知道为什么他们的作品,而不是递归的,但我的不工作,是递归的?Here是他们的代码的链接(在他们的代码中有很多额外的功能,我不使用我的)。
我是一个初学者程序员(这是我的第一个Java程序!),所以任何人都可以提供的任何信息将是伟大的!(我也很抱歉,如果我遗漏了任何相关的信息,我试图只分享与错误相关的内容)

kq4fsx7k

kq4fsx7k1#

构造函数正在调用自身:

//recursive error comes from here
    Tags(String tag, String value)  
    {
        this(tag, value);
    }

如果编译器允许这样做,构造函数在被调用时将进入无限循环。
重写它以简单地从给定参数初始化两个字段,如下所示:

Tags(String tag, String value)  
    {
        this.tag = tag;
        this.value = value;
    }

相关问题