Java Annotations – Hackerrank Challenge – Java Solution
This is the Java solution for the Hackerrank problem – Java Annotations – Hackerrank Challenge – Java Solution.
Source – Java-aid’s repository.
/** * */ package com.javaaid.hackerrank.solutions.languages.java.advanced; 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; /** * @author Kanahaiya Gupta * */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @interface FamilyBudget { String userRole() default "GUEST"; int moneySpend() default 100; } class FamilyMember { @FamilyBudget(userRole = "SENIOR") 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", moneySpend = 50) 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 JavaAnnotations { 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.moneySpend(); if (userRole.equals(role)) { if (budgetLimit >= spend) { method.invoke(FamilyMember.class.newInstance(), budgetLimit, spend); } else { System.out.println("Budget Limit Over"); } } } } } catch (Exception e) { e.printStackTrace(); } testCases--; } in.close(); } }