【发布时间】:2014-08-12 17:27:03
【问题描述】:
我有一个包含以下内容的类:
List roles = ldapTemplate.search(baseDn, replaceFilter, sc,
new AttributesMapper() {
public Object mapFromAttributes(Attributes attrs)
throws NamingException {
return attrs.get("cn").get();
}
});
IntelliJ 告诉我用 lambda 替换匿名内部类。 所以我尝试了:
List roles = ldapTemplate.search(
baseDn, replaceFilter, sc,
(Attributes a) -> { return a.get("cn").get(); };
);
但是,我得到一个编译错误:
Error:(46, 50) java: incompatible types: inference variable T has incompatible bounds
equality constraints: java.lang.String
lower bounds: java.lang.Object
我找不到这个问题的解决方案。你有什么想法吗?
【问题讨论】:
-
看起来需要将 lambda 的返回值转换为
String。 -
是(属性 a)->(字符串)a.get("cn").get() 一切都很好。但是我不明白为什么在我的内部类中我返回一个对象并且一切都很好,而不是在 lambda 中。
-
我不确定,但它一定与类型推断有关。我刚刚在我的机器上尝试了一个简单的测试,它似乎可以在没有强制转换的情况下工作。使用的Java版本是
java version "1.8.0_05" Java(TM) SE Runtime Environment (build 1.8.0_05-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)