1
public class ActivityInventoryMem<Activity> extends TreeSet<Activity> implements ActivityInventory<Activity> {

  @Override
  public ToDo toDo( LocalDate date ) {
    Stream<Activity> s = this.parallelStream();

    s.filter( a ->  a.completed() );
    return new ToDo();
  }
}

这是例外

java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: java.util.stream.Stream.filter
at com.lm.infrastructure.memory.ActivityInventoryMem.toDo(ActivityInventoryMem.java:16)
at com.lm.infrastructure.memory.ActivityInventoryMemNGTest.testToDo(ActivityInventoryMemNGTest.java:46)

我在 jdk 8 中运行它,并将以下内容放入 mypom.xml中,现在它似乎可以识别 lambda 的

    <!-- maven-compiler-plugin -->
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>

问题(根据我从 netbeans 收集的信息)是它被a视为Object不是一个Activity,所以它看不到.completed(),我该如何解决这个问题?

4

1 回答 1

7

在您的声明中:

public class ActivityInventoryMem<Activity> extends TreeSet<Activity> implements ActivityInventory<Activity>
//                                 ^ (1)                     ^ (2)                                  ^ (3)

Activityat (2) 和 (3)的用途是作为TreeSetand的类型参数,而 at (1) 的用途是为您的类ActivityInventory声明一个新的类型参数。ActivityInventoryMem因此,该类中符号Activity的使用并不指代您的实际Activity类,它们指的是一些实际类型未知的类型参数。

您可能只想从您的类声明中删除 (1):

public class ActivityInventoryMem extends TreeSet<Activity> implements ActivityInventory<Activity>
于 2014-02-03T06:23:43.340 回答