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();
}
};
Я использовал что-то подобное в прошлом. Это похоже на предыдущий ответ, но технически он более эффективен в том смысле, что он кэширует результат совпадения, особенно если обнаружение используется в анимации, событии прокрутки и т. П.
в BaseMatcher, вам нужно указать параметры типа:
public SubMatcher with(Matcher<?, ?> matcher) {
, чтобы позволить javac соответствовать вашему с методом
PS
imho это ошибка компилятора eclipse
Проверьте, с каким jre или jdk вы компилируете как в Eclipse, так и в терминале. Возможно, дело в версии.
Подходит для меня:
$ 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 $
Я смутно помню такой отчет об ошибке, но не могу дать вам ссылку на него прямо сейчас.
Я успешно собрал его, добавив ,?>
в Matcher
в SubMatcher.with
:
class SubMatcher extends BaseMatcher {
@Override
public SubMatcher with(Matcher<?,?> matcher) {
return this;
}
}
Без этого сигнатура метода отличается от базовой. Интересно, есть ли там?