biryu2205 / Biryu

0 stars 0 forks source link

Java Annotations #99

Closed biryu2205 closed 6 years ago

biryu2205 commented 6 years ago
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Method;
import java.util.Scanner;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) @interface FamilyBudget {
  String userRole() default "GUEST";

  int budgetLimit() default 0; // edited line
}

class FamilyMember {
  @FamilyBudget(userRole = "SENIOR", budgetLimit = 100) // added line
  public void seniorMember(int budget, int moneySpend) {
    System.out.println("Senior Member");
    System.out.println("Spend: " + moneySpend);
    System.out.println("Budget Left: " + (budget - moneySpend));
  }

  @FamilyBudget(userRole = "JUNIOR", budgetLimit = 50) // added line
  public void juniorUser(int budget, int moneySpend) {
    System.out.println("Junior Member");
    System.out.println("Spend: " + moneySpend);
    System.out.println("Budget Left: " + (budget - moneySpend));
  }
}

public class Solution {
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int testCases = Integer.parseInt(in.nextLine());
    while (testCases > 0) {
      String role = in.next();
      int spend = in.nextInt();
      try {
        Class annotatedClass = FamilyMember.class;
        Method[] methods = annotatedClass.getMethods();
        for (Method method : methods) {
          if (method.isAnnotationPresent(FamilyBudget.class)) {
            FamilyBudget family = method
                .getAnnotation(FamilyBudget.class);
            String userRole = family.userRole();
            int budgetLimit = family.budgetLimit(); // edited line
            if (userRole.equals(role)) {
              if (spend <= budgetLimit) { // edited line
                method.invoke(FamilyMember.class.newInstance(),
                    budgetLimit, spend);
              } else {
                System.out.println("Budget Limit Over");
              }
            }
          }
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      testCases--;
    }
  }
}

Link- https://www.hackerrank.com/challenges/java-annotations/problem