There are 4 boolean state-returning methods, but my solution is probably more relevant when there are more states.  Instead of having 4 boolean state members, the Component class would have an `EnumSet<State>`.

    public enum State {
       HAS_ONE_CHANNEL, HAS_VALID_CERTIFICATE, IS_TESTED, IS_FREQUENTLY_USED;
    }

    public enum Category {
       C24(EnumSet.of(States.HAS_ONE_CHANNEL, ...)),
       C95(EnumSet.of(...)),
       ...;
       
       private EnumSet<State> enumSet;

       private Category(EnumSet<State> enumSet) {
          this.enumSet = enumSet;
       }

       public boolean equals(EnumSet<State> otherEnumSet) {
          return enumSet.equals(otherEnumSet);
       }

       // returns null if not found
       public static Category find(EnumSet<State> otherEnumSet) {
           // TODO instead of looping, it would be more efficient to build a HashMap<EnumSet<State>, Category>> once
           for (Category category : Category.values()) {
              if (category.equals(otherEnumSet)) 
                 return category;
           }
           return null;
       }
     }