Почему не работает лямбда-пример в 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);
}
Другие вопросы по тегам