为什么流不能识别我的类型?

时间:2014-02-03 05:34:43

标签: java filter lambda java-8 java-stream

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中运行它,我将以下内容放在我的pom.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() },我该如何解决这个问题?

1 个答案:

答案 0 :(得分:7)

在你的声明中:

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

({1}}在(2)和(3)的用法是ActivityTreeSet的类型参数,而(1)的用法是声明 new您的ActivityInventory课程的类型参数。因此,在该类中使用符号ActivityInventoryMem不会引用您的实际Activity类,它们引用某些类型参数,其实际类型未知。

您可能只想在课堂声明中留下(1):

Activity