We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
  • HackerRank Home

    HackerRank

  • |
  • Prepare
  • Certify
  • Compete
  • Hiring developers?
  1. Prepare
  2. Java
  3. Advanced
  4. Java Annotations
  5. Discussions

Java Annotations

Problem
Submissions
Leaderboard
Discussions
Editorial

    You are viewing a single comment's thread. Return to all comments →

  • sngrisa
    4 months ago+ 0 comments

    In Java 8

    import java.lang.annotation.*;
    import java.lang.reflect.*;
    import java.util.*;
    
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @interface FamilyBudget {
    	String userRole() default "GUEST";
    	int budgetLimit() 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", budgetLimit = 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 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();
    						if (userRole.equals(role)) {
    							if(spend<=budgetLimit){
    								method.invoke(FamilyMember.class.newInstance(),
    										budgetLimit, spend);
    							}else{
    								System.out.println("Budget Limit Over");
    							}
    						}
    					}
    				}
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    			testCases--;
    		}
    	}
    }
    
    0|
    Permalink
  • Blog
  • Scoring
  • Environment
  • FAQ
  • About Us
  • Support
  • Careers
  • Terms Of Service
  • Privacy Policy