Reflection

📁 ex01

☕ FormElement.java

public abstract class FormElement { }

☕ Clickable.java

public interface Clickable { }

☕ Hoverable.java

public interface Hoverable { }

☕ Button.java

public class Button extends FormElement implements Clickable, Hoverable {
    public static int lastNo = 0;
    private int no = ++lastNo;
    private String name;
    private int spaces = 2;
    public boolean disabled = false;

    public Button() {
        name = "Default";
        spaces = 1;
    }
    public Button(String name, int spaces) {
        this.name = name;
        this.spaces = spaces;
    }

    public int getNo() { return no; }

    public String getName() { return name; }

    public int getSpaces() { return spaces; }

    public void onClick (boolean rightClick, int x, int y) {
        System.out.printf(
                "🖱️ %s (%d, %d)%n",
                (rightClick ? "우클릭" : "좌클릭"), x, y
        );
    }
}

☕ Main.java

				//  💡 클래스를 가져오는 두 방법
				//  - 와일드카드<?> 사용 가능
        Class<Button> btnClass1 = Button.class;
        //  예외 던짐 : ClassNotFoundException
        Class<?> btnClass2 = Class.forName("sec13.chap01.ex01.Button");

        boolean areSame = btnClass1 == btnClass2;
				//  💡 모든 생성자 배열로 가져오기
        Constructor[] btn1Constrs = btnClass1.getConstructors();

        //  💡 생성자 가져오기
        //  - 주어진 인자 타입에 일치하는 것으로
        //  - 일치하는 것 없을 시 예외 던짐 : NoSuchMethodException
        Constructor<?> btn1Constr = btnClass1
                .getConstructor(String.class, int.class);