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()
},我该如何解决这个问题?
答案 0 :(得分:7)
在你的声明中:
public class ActivityInventoryMem<Activity> extends TreeSet<Activity> implements ActivityInventory<Activity>
// ^ (1) ^ (2) ^ (3)
({1}}在(2)和(3)的用法是Activity
和TreeSet
的类型参数,而(1)的用法是声明 new您的ActivityInventory
课程的类型参数。因此,在该类中使用符号ActivityInventoryMem
不会引用您的实际Activity
类,它们引用某些类型参数,其实际类型未知。
您可能只想在课堂声明中留下(1):
Activity