@Override
    public boolean filter(Class c) {
        if(type != null && !type.isAssignableFrom(c)){
            return false;
        }
        if(annotation!=null && c.getAnnotation(annotation)==null){
            return false;
        }
        if(!allowAbstract && Modifier.isAbstract(c.getModifiers())){
            return false;
        }
        return true;
    }