Браузер не может выполнить любой скрипт npm.
Простейшим решением было бы установить пакетный файл на компьютере ПО, который будет выполнять последовательно:
git clone < e2e-repo >
cd < e2e-repo >
npm install
npm run e2e
Наиболее близким «шаблоном», на мой взгляд, является токен типа , и Руководство по Generics рекомендует их. Вы также можете превратить базовый предикат в токен супертипа (он же гаджет Gafter) и сохранить пару лишних строк при определении новых предикатов.
Если хотите, вы можете использовать шаблон посетителя или его варианты, чтобы обойти явное построение и приведение типов. См. вики-страницу спящего режима на этом . Я думал о том, решите ли вы свою проблему, полностью учитывая особенности стирания шрифта, и я не совсем уверен, что это сработает полностью.
edit: Я видел ваше добавление. Если вы заставите свою иерархию предикатов следовать иерархии посетителей, вам не потребуется преобразование перед вызовом сопоставления. Вот так (непроверено):
interface Element {
public boolean accept(ElementPredicateVisitor v);
}
class Declaration implements Element {
public boolean accept(ElementPredicateVisitor v) {
return v.visit(this);
}
}
class TaxReturn implements Element {
public boolean accept(ElementPredicateVisitor v) {
return v.visit(this);
}
}
interface IElementPredicate {
public void match(Element e);
}
class ElementPredicateVisitor implements IElementPredicate {
public boolean match(Element e) {
return e.accept(this);
}
/**
* default values
*/
boolean visit(Declaration d) { return false; }
boolean visit(TaxReturn tr) { return false; }
}
class DeclarationNamePredicate extends ElementPredicateVisitor {
boolean visit(Declaration d) {
return d.dSpecificExtraName() == "something"
}
}
class TaxReturnSumPredicate extends ElementPredicateVisitor {
boolean visit(TaxReturn tr) {
return tr.sum() > 1000;
}
}
public <T extends Element> List<T> findAll(IElementPredicate pred) {
List<T> ret = new LinkedList<T>();
for(Element e: elements) {
if (pred.match(obj)) {
ret.add((T) obj);
}
}
return ret;
}
Структура вашего дерева очень похожа на объект XML DOM. Думали ли вы о переводе своего дерева в структуру DOM и использовании XPath для выполнения ваших запросов? Это могло бы быть намного меньше специального кода.
I think that is nice and clean way of doing it and I would probably do it in the same way.