????????????????????????

public class PasswordUtils {
      @UseCase(id = 47?? description = "Passwords must contain at least one numeric")
      public boolean validatePassword(String password) {
          return (password.matches("\w*\d\w*"));
      }
 
      @UseCase(id = 48)
      public String encryptPassword(String password) {
          return new StringBuilder(password).reverse().toString();
      }
  }

?????????????????????????????????????漰???????????

???????????????????????????????????????鷽????????????????????????????????????????

public static void main(String[] args) {
     List<Integer> useCases = new ArrayList<Integer>();
     Collections.addAll(useCases?? 47?? 48?? 49?? 50);
     trackUseCases(useCases?? PasswordUtils.class);
 }
 
 public static void trackUseCases(List<Integer> useCases?? Class<?> cl) {
     for (Method m : cl.getDeclaredMethods()) {
         UseCase uc = m.getAnnotation(UseCase.class);
         if (uc != null) {
             System.out.println("Found Use Case:" + uc.id() + " "
                         + uc.description());
             useCases.remove(new Integer(uc.id()));
         }
     }
     for (int i : useCases) {
         System.out.println("Warning: Missing use case-" + i);
     }
 }

????Found Use Case:47 Passwords must contain at least one numeric

????Found Use Case:48 no description

????Warning: Missing use case-49

????Warning: Missing use case-50

????????????δ???????????????????????????????????

????д???????????????????????????????????????????д???????????????

??????????????????????????????????????????????????Щ????????????????????????????????????????÷??????е?????????????????????в????????????????