package org.nwapw.abacus.function; import org.nwapw.abacus.number.NaiveNumber; import org.nwapw.abacus.number.NumberInterface; import java.util.HashMap; public abstract class Function { private static final HashMap, Integer> priorityMap = new HashMap, Integer>() {{ put(NaiveNumber.class, 0); }}; protected abstract boolean matchesParams(NumberInterface[] params); protected abstract NumberInterface applyInternal(NumberInterface[] params); public NumberInterface apply(NumberInterface...params) { if(!matchesParams(params)) return null; return applyInternal(params); } }