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