JDA创建SelectOption类型List/Collection集合报错的解决方法
报错原因
这个报错和你创建存储SelectOption的List/Collection集合没有关系,问题出在SelectOption的实例化环节:
你调用的SelectOption(java.lang.String, java.lang.String)构造方法是受访问保护的成员,修饰符为protected,仅允许JDA框架内部同包类、SelectOption的子类调用,外部业务代码没有权限直接访问这个构造方法。
修复方法
JDA官方没有对外开放SelectOption的构造方法,而是提供了公开的静态工厂方法来创建实例,不要直接用new调用构造方法,改用SelectOption.of(String label, String value)即可正常创建对象。
修正后的代码示例:
List<SelectOption> li = new ArrayList<>(); // 第一个参数是用户在下拉菜单中看到的选项文本,第二个参数是选项选中后提交到后端的值 li.add(SelectOption.of("选项展示文本", "选项对应提交值"));
使用注意
- 传入的label和value都不能是空字符串,其中label长度不能超过25字符,value长度不能超过100字符
- 如果需要给选项增加说明文本、设置默认选中状态、绑定表情图标,可以对
of方法返回的实例链式调用对应配置方法,示例:
li.add(SelectOption.of("同意社区规则", "rule_agree") .withDescription("确认已完整阅读并自愿遵守社区所有管理规范") .withDefault(true));
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

