Почему Eclipse компилирует это, но javac не делает?

var device = {
  detect: function(key) {
    if(this['_'+key] === undefined) {
      this['_'+key] = navigator.userAgent.match(new RegExp(key, 'i'));
    }
    return this['_'+key];
  },
  iDevice: function() {
    return this.detect('iPhone') || this.detect('iPod');
  },
  android: function() {
    return this.detect('Android');
  },
  webOS: function() {
    return this.detect('webOS');
  },
  mobile: function() {
    return this.iDevice() || this.android() || this.webOS();
  }
};

Я использовал что-то подобное в прошлом. Это похоже на предыдущий ответ, но технически он более эффективен в том смысле, что он кэширует результат совпадения, особенно если обнаружение используется в анимации, событии прокрутки и т. П.

7
задан JasonMArcher 21 October 2014 в 21:10
поделиться

4 ответа

в BaseMatcher, вам нужно указать параметры типа:

public SubMatcher with(Matcher<?, ?> matcher) {

, чтобы позволить javac соответствовать вашему с методом

PS

imho это ошибка компилятора eclipse

7
ответ дан 6 December 2019 в 19:40
поделиться

Проверьте, с каким jre или jdk вы компилируете как в Eclipse, так и в терминале. Возможно, дело в версии.

0
ответ дан 6 December 2019 в 19:40
поделиться

Подходит для меня:

$ java -version
openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-****-2009_07_23_10_21-b00)
OpenJDK 64-Bit Server VM (build 16.0-b06, mixed mode)
$ javac -XDrawDiagnostics Test.java 
$

Я смутно помню такой отчет об ошибке, но не могу дать вам ссылку на него прямо сейчас.

0
ответ дан 6 December 2019 в 19:40
поделиться

Я успешно собрал его, добавив в Matcher в SubMatcher.with :

class SubMatcher extends BaseMatcher {
    @Override
    public SubMatcher with(Matcher<?,?> matcher) {
        return this;
    }
}

Без этого сигнатура метода отличается от базовой. Интересно, есть ли там?

6
ответ дан 6 December 2019 в 19:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: