Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法检查Lambda变量的显式类型?_Java_Lambda_Checkstyle - Fatal编程技术网

Java 有没有办法检查Lambda变量的显式类型?

Java 有没有办法检查Lambda变量的显式类型?,java,lambda,checkstyle,Java,Lambda,Checkstyle,拿这个兰姆达来说: final List<String> badKeys = pivMap.entrySet().stream() .filter(entry -> StringUtils.trimToNull(entry.getValue()) == null || entry.getValue().equals("{}") || entry.getValue().equals("{ }")) .map(Map.Entry::get

拿这个兰姆达来说:

final List<String> badKeys = pivMap.entrySet().stream()
 .filter(entry -> StringUtils.trimToNull(entry.getValue()) == null || entry.getValue().equals("{}") || entry.getValue().equals("{ }"))
 .map(Map.Entry::getKey)
 .collect(Collectors.toList());
final List badKeys=pivMap.entrySet().stream()
.filter(entry->StringUtils.trimtoull(entry.getValue())==null | | | entry.getValue().equals(“{}”)| | entry.getValue().equals(“{}”))
.map(map.Entry::getKey)
.collect(Collectors.toList());
我们希望确保Lambda变量上存在显式类型:

final List<String> badKeys = pivMap.entrySet().stream()
 .filter((final Map.Entry<String, String> entry) -> StringUtils.trimToNull(entry.getValue()) == null || entry.getValue().equals("{}") || entry.getValue().equals("{ }"))
 .map(Map.Entry::getKey)
 .collect(Collectors.toList());
final List badKeys=pivMap.entrySet().stream()
.filter((final Map.Entry)->StringUtils.trimToNull(Entry.getValue())==null | | | Entry.getValue().equals(“{}”)| | Entry.getValue().equals(“{}”))
.map(map.Entry::getKey)
.collect(Collectors.toList());
有没有一种方法可以使用puppycrawl checkstyle来检查上面的lambda表达式是否存在类型?在这种情况下,变量的类型声明为:
(final Map.Entry)

这可以通过以下方式实现:

配置:


这里我们使用一个XPath表达式来检查
IDENT
是否是lambda的第一个子级,这意味着在本例中它不是类型化的

Java示例:


导入java.util.List;
导入java.util.Map;
导入java.util.stream.collector;
导入org.apache.commons.lang.StringUtils;
公共类MyClass{
无效badLambda(地图pivMap){
最终列表badKeys=pivMap.entrySet().stream()
.filter(entry->StringUtils.trimToNull(entry.getValue())==null//违反
||entry.getValue().equals(“{}”)
||entry.getValue().equals(“{}”))
.map(map.Entry::getKey)
.collect(Collectors.toList());
}
void goodLambda(地图pivMap){
最终列表badKeys=pivMap.entrySet().stream()
.filter((final Map.Entry)->StringUtils.trimToNull(Entry.getValue())==null//ok
||entry.getValue().equals(“{}”)
||entry.getValue().equals(“{}”))
.map(map.Entry::getKey)
.collect(Collectors.toList());
}
}
结果:


➜  src java-jar checkstyle-8.41-all.jar-c config.xml MyClass.java
正在启动审核。。。
[错误]MyClass.java:11:31:Lambda参数必须具有类型。[匹配XPath]
审计完成。
Checkstyle以1个错误结束。

Nick您是否有Stellar或接受BAT代币?我想请你喝杯啤酒。谢谢你令人难以置信的回答乔纳森-你的感激已经足够了!很高兴能为您提供帮助:)以后如果您有任何与Checkstyle相关的问题,请随时与我联系。