class AbstractFilter implements Filter {

    protected final String name;
    protected final List<FilterProperty> properties;

    public AbstractFilter(String name) {
        this.name = name;
        this.properties = new ArrayList<>();
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public FilterProperty[] getProperties() {
        return properties.toArray(new FilterProperty[0]);
    }

    public void addProperty(Class clazz, String name) {<FILL_FUNCTION_BODY>}
}

        try {
            properties.add(FilterProperty.createProperty(this, clazz, name));
        } catch (NoSuchMethodException ex) {
            Logger.getLogger("").log(Level.SEVERE, "Error while creating '" + name + "' property", ex);
        }
    
<no_super_class>