You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spigot Minecraft插件开发Java ArrayList无法add添加元素问题

出错原因

这是Java基础语法错误:你把censored.add("example1")这条执行语句直接写在了Words类的类体中,不符合Java语法规范。
Java类的成员位置(类的大括号范围内,方法/代码块之外)只允许写以下内容:

  • 成员变量声明与初始化赋值
  • 成员方法、构造方法定义
  • 静态代码块、实例代码块定义
  • 内部类、接口声明
    直接裸露的方法调用语句不属于合法的类成员内容,编译阶段就会直接报错,根本不会执行添加元素的逻辑。你最开始写的两行测试代码如果放在main方法或者其他普通方法里是可以正常运行的,挪到类体成员位置就会触发这个错误。
解决方案

根据Spigot插件的开发场景,提供三种可直接使用的正确写法,按需选择即可:

写法1:构造方法内初始化

实例化Words对象时会自动执行构造方法内的逻辑,完成敏感词加载:

package me.chiz.cava.AutoMute;

import java.util.ArrayList;

public class Words {
    ArrayList<String> censored = new ArrayList<String>();

    // 类构造方法
    public Words() {
        censored.add("example1");
        // 后续新增敏感词直接在这后面追加add语句即可
    }
}

写法2:实例初始化块加载

如果不需要额外写构造方法,可以用实例初始化块包裹执行逻辑,效果和写在构造方法里一致:

package me.chiz.cava.AutoMute;

import java.util.ArrayList;

public class Words {
    ArrayList<String> censored = new ArrayList<String>();

    // 实例初始化块
    {
        censored.add("example1");
    }
}

写法3:静态全局集合(最适合插件敏感词场景)

如果敏感词表全局只需要维护一份,不需要每个Words实例单独存储,可以把集合定义为静态常量,用静态代码块初始化,后续不需要反复实例化对象,直接调用即可:

package me.chiz.cava.AutoMute;

import java.util.ArrayList;
import java.util.List;

public class Words {
    public static final List<String> CENSORED = new ArrayList<>();

    static {
        CENSORED.add("example1");
        // 所有敏感词统一在静态块中加载
    }
}

使用时直接通过Words.CENSORED就能拿到完整的敏感词集合,性能更好也更方便调用。

开发提示:如果敏感词数量较多,不要硬编码在类文件中,建议把敏感词列表写到插件的config.yml配置文件里,插件启动时读取配置加载到集合,后续调整敏感词不需要重新编译打包插件。


内容的提问来源于stack exchange,提问作者Chiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:12:29