Почему не работает лямбда-пример в hankcs/AhoCorasickDoubleArrayTrie?
Я просто копирую пример со страницы проекта github без каких-либо изменений, и это дает мне ошибку компиляции
Чтобы воспроизвести, добавьте эту зависимость к вашему пом
<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>
Пожалуйста, дайте мне знать, если вам нужно что-то уточнить. Вы должны быть в состоянии воспроизвести это с тем, что я предоставил здесь, хотя.
Кроме того, было предложено, что это может быть дублирующим вопросом, когда я опубликовал это ранее, но я не думаю, что это так, поскольку этот вопрос не связан с лямбда-функциями. Если я не прав, пожалуйста, помогите мне понять, как ответ на этот вопрос может решить то, что я испытываю
1 ответ
AhoCorasickDoubleArrayTrie
имеет два метода под названием parseText
один с IHit
другой с IHitCancellable
в качестве параметра. Оба интерфейса объявляют метод boolean hit(int begin, int end, V value)
Таким образом, используя лямбду, компилятор не знает, какой метод вы намереваетесь вызвать.
Я не нашел быстрого решения по поиску, но вы можете объявить, что ваш собственный класс расширяется AhoCorasickDoubleArrayTrie
с собственным методом, вызывающим намеченный метод в суперклассе, который имеет интерфейс, который вы хотите использовать, например,
void myParseText(String text, IHit<V> hit) {
super.parseText(text, hit);
}