为什么 hankcs/AhoCorasickDoubleArrayTrie 中的 lambda 示例不起作用?
Why doesn't the lambda example in hankcs/AhoCorasickDoubleArrayTrie work?
我只是从这个 github project page 中复制示例,没有任何更改,它给我一个编译错误
要重现,请将此依赖项添加到您的 pom
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>aho-corasick-double-array-trie</artifactId>
<version>1.2.1</version>
</dependency>
然后尝试运行这个:
// Collect test data set
TreeMap<String, String> map = new TreeMap<String, String>();
String[] keyArray = new String[]
{
"hers",
"his",
"she",
"he"
};
for (String key : keyArray)
{
map.put(key, key);
}
// Build an AhoCorasickDoubleArrayTrie
AhoCorasickDoubleArrayTrie<String> acdat = new AhoCorasickDoubleArrayTrie<String>();
acdat.build(map);
// Test it
final String text = "uhers";
acdat.parseText(text, (begin, end, value) -> {
System.out.printf("[%d:%d]=%s\n", begin, end, value);
});
编译错误为
The method parseText(CharSequence, AhoCorasickDoubleArrayTrie.IHit<String>) is ambiguous for the type AhoCorasickDoubleArrayTrie<String>
如果您需要任何说明,请告诉我。不过,您应该可以使用我在此处提供的内容重现此内容。
此外,有人建议这可能是 我之前发布此问题时,但我认为情况并非如此,因为该问题与 lambda 函数无关。如果我错了,请帮助我了解该问题的答案如何解决我遇到的问题
AhoCorasickDoubleArrayTrie
有两个方法叫做 parseText
,一个用 IHit
,另一个用 IHitCancellable
作为参数。两个接口都声明了一个方法 boolean hit(int begin, int end, V value)
,因此通过使用 lambda,编译器不知道您打算调用什么方法。
我还没有通过谷歌搜索找到快速解决方案,但你可以做的是声明你自己的 class 扩展 AhoCorasickDoubleArrayTrie
用自己的方法调用 super class 具有您要使用的界面,例如
void myParseText(String text, IHit<V> hit) {
super.parseText(text, hit);
}
我只是从这个 github project page 中复制示例,没有任何更改,它给我一个编译错误
要重现,请将此依赖项添加到您的 pom
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>aho-corasick-double-array-trie</artifactId>
<version>1.2.1</version>
</dependency>
然后尝试运行这个:
// Collect test data set
TreeMap<String, String> map = new TreeMap<String, String>();
String[] keyArray = new String[]
{
"hers",
"his",
"she",
"he"
};
for (String key : keyArray)
{
map.put(key, key);
}
// Build an AhoCorasickDoubleArrayTrie
AhoCorasickDoubleArrayTrie<String> acdat = new AhoCorasickDoubleArrayTrie<String>();
acdat.build(map);
// Test it
final String text = "uhers";
acdat.parseText(text, (begin, end, value) -> {
System.out.printf("[%d:%d]=%s\n", begin, end, value);
});
编译错误为
The method parseText(CharSequence, AhoCorasickDoubleArrayTrie.IHit<String>) is ambiguous for the type AhoCorasickDoubleArrayTrie<String>
如果您需要任何说明,请告诉我。不过,您应该可以使用我在此处提供的内容重现此内容。
此外,有人建议这可能是
AhoCorasickDoubleArrayTrie
有两个方法叫做 parseText
,一个用 IHit
,另一个用 IHitCancellable
作为参数。两个接口都声明了一个方法 boolean hit(int begin, int end, V value)
,因此通过使用 lambda,编译器不知道您打算调用什么方法。
我还没有通过谷歌搜索找到快速解决方案,但你可以做的是声明你自己的 class 扩展 AhoCorasickDoubleArrayTrie
用自己的方法调用 super class 具有您要使用的界面,例如
void myParseText(String text, IHit<V> hit) {
super.parseText(text, hit);
}