Processing error: expecting "class", found 'Set' in implemented interface method
Processing error: expecting "class", found 'Set' in implemented interface method
我有以下实体-组件-系统接口来表示系统(在 ECSSystem.java
中):
interface ECSSystem extends Consumer<Set<Entity>> {
public void accept(Set<Entity> entities);
public Set<Class<? extends Component>> required();
}
其中 Component
是空接口,Entity
是 class。
然后我将使用以下代码(在 PlayerInputSystem.pde
中)实现接口:
class PlayerInputSystem implements System {
public void accept(Set<Entity> entities) {
// implementation here
}
public Set<Class<? extends Component>> required() {
final Set<Class<? extends Component>> reqs = new HashSet<>();
// implementation here
return reqs;
}
}
对于 PlayerInputSystem.pde
中的行 final Set<Class<? extends Component>> reqs = new HashSet<>();
,我得到以下错误:
expecting "class", found 'Set'
这只是 Processing (3.2.3) 不理解,还是覆盖了 Class
对象?我该如何解决它,或者我是否需要解决这个问题?
编辑:这是一个最小可行的测试示例,它因相同的错误而失败:
import java.util.function.Consumer;
import java.util.HashSet;
import java.util.Set;
void setup() {
}
void draw() {
}
interface Component {
}
class Entity {
}
interface ECSSystem extends Consumer<Set<Entity>> {
public void accept(Set<Entity> entities);
public Set<Class<? extends Component>> required();
}
class PlayerInputSystem implements ECSSystem {
public void accept(Set<Entity> entities) {
}
public Set<Class<? extends Component>> required() {
final Set<Class<? extends Component>> reqs = new HashSet<>(); // error here
return reqs;
}
}
删除报告错误的final
关键字然后给出新错误:
unexpected token: ?
请尝试 post [mcve] 而不是断开连接的片段。您 post 编写的代码包含一堆错误,因为您没有包含我们需要的所有 classes。但不是简单地添加那些 classes,而是尝试将您的问题缩小到尽可能少的行。正如 Eran 所说,您真的应该远离 class 已经在使用的名称。
这是我试图绕过您未提供的 classes 的尝试,只是使用 Object
代替。这编译得很好:
import java.util.Set;
import java.util.HashSet;
import java.awt.Component;
void draw(){
}
public interface System{
public void accept(Set<Object> entities);
public Set<Class<? extends Component>> required();
}
class PlayerInputSystem implements System {
public void accept(Set<Object> entities) {
// implementation here
}
public Set<Class<? extends Component>> required() {
final Set<Class<? extends Component>> reqs = new HashSet<>();
// implementation here
return reqs;
}
}
编辑:您遇到的真正问题是 Processing 不支持菱形运算符,而这正是您在此行中尝试使用的:
final Set<Class<? extends Component>> reqs = new HashSet<>();
这是一个已知问题 here。
我有以下实体-组件-系统接口来表示系统(在 ECSSystem.java
中):
interface ECSSystem extends Consumer<Set<Entity>> {
public void accept(Set<Entity> entities);
public Set<Class<? extends Component>> required();
}
其中 Component
是空接口,Entity
是 class。
然后我将使用以下代码(在 PlayerInputSystem.pde
中)实现接口:
class PlayerInputSystem implements System {
public void accept(Set<Entity> entities) {
// implementation here
}
public Set<Class<? extends Component>> required() {
final Set<Class<? extends Component>> reqs = new HashSet<>();
// implementation here
return reqs;
}
}
对于 PlayerInputSystem.pde
中的行 final Set<Class<? extends Component>> reqs = new HashSet<>();
,我得到以下错误:
expecting "class", found 'Set'
这只是 Processing (3.2.3) 不理解,还是覆盖了 Class
对象?我该如何解决它,或者我是否需要解决这个问题?
编辑:这是一个最小可行的测试示例,它因相同的错误而失败:
import java.util.function.Consumer;
import java.util.HashSet;
import java.util.Set;
void setup() {
}
void draw() {
}
interface Component {
}
class Entity {
}
interface ECSSystem extends Consumer<Set<Entity>> {
public void accept(Set<Entity> entities);
public Set<Class<? extends Component>> required();
}
class PlayerInputSystem implements ECSSystem {
public void accept(Set<Entity> entities) {
}
public Set<Class<? extends Component>> required() {
final Set<Class<? extends Component>> reqs = new HashSet<>(); // error here
return reqs;
}
}
删除报告错误的final
关键字然后给出新错误:
unexpected token: ?
请尝试 post [mcve] 而不是断开连接的片段。您 post 编写的代码包含一堆错误,因为您没有包含我们需要的所有 classes。但不是简单地添加那些 classes,而是尝试将您的问题缩小到尽可能少的行。正如 Eran 所说,您真的应该远离 class 已经在使用的名称。
这是我试图绕过您未提供的 classes 的尝试,只是使用 Object
代替。这编译得很好:
import java.util.Set;
import java.util.HashSet;
import java.awt.Component;
void draw(){
}
public interface System{
public void accept(Set<Object> entities);
public Set<Class<? extends Component>> required();
}
class PlayerInputSystem implements System {
public void accept(Set<Object> entities) {
// implementation here
}
public Set<Class<? extends Component>> required() {
final Set<Class<? extends Component>> reqs = new HashSet<>();
// implementation here
return reqs;
}
}
编辑:您遇到的真正问题是 Processing 不支持菱形运算符,而这正是您在此行中尝试使用的:
final Set<Class<? extends Component>> reqs = new HashSet<>();
这是一个已知问题 here。