Почему не работает лямбда-пример в hankcs / AhoCorasickDoubleArrayTrie? - PullRequest
0 голосов
/ 01 февраля 2019

Я просто копирую пример с этой страницы проекта github без каких-либо изменений, и это дает мне ошибку компиляции

Чтобы воспроизвести, добавьте эту зависимость к вашему 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>

Пожалуйста, дайте мне знать, если вам нужно что-то уточнить.Вы должны быть в состоянии воспроизвести это с тем, что я здесь предоставил.

Кроме того, было предложено, что это может быть дублирующий вопрос , когда я опубликовал это ранее, но я не думаю, что этоДело в том, что этот вопрос не связан с лямбда-функциями.Если я ошибаюсь, пожалуйста, помогите мне понять, как ответ на этот вопрос может решить то, что я испытываю

1 Ответ

0 голосов
/ 01 февраля 2019

AhoCorasickDoubleArrayTrie имеет два метода с именем parseText, один с IHit, другой с IHitCancellable в качестве параметра.Оба интерфейса объявляют метод boolean hit(int begin, int end, V value), поэтому, используя лямбду, компилятор не знает, какой метод вы намереваетесь вызывать.

Я не нашел быстрого решения путем поиска в Google, но вы можете сделать следующее:объявите свой собственный класс, расширяющий AhoCorasickDoubleArrayTrie с помощью собственного метода, вызывающего намеченный метод в суперклассе, который имеет интерфейс, который вы хотите использовать, например,

void myParseText(String text, IHit<V> hit) {
    super.parseText(text, hit);
}
...