자바에서 어떤 클래스 안에 있는 메소드 이름들만 반환해줄수있는게 있나요??
조회수 4225회
제가 어떤 기능을 가진 클래스를 만들고 그 클래스를 메뉴에서 불러서 그 클래스 안에있는 메소드이름을 콘솔창에서
1.~ 2.~ 3.~
이렇게 만든후 번호를 선택하면 클래스의 메소드를 실행시키고 싶습니다 혹시 getName같은 함수가 있나요? 아니면 클래스마다 배열선언해서 넣어주고 그걸 반환해야하나요?
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
리플렉션
을 사용하시면 됩니다.아래는 간단한 예제이고, 자세한 사용법은 링크 참고해 주세요 :)
입력
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; public class Lambda { public void a() { } public int b() { return 12; } public String c() { return ""; } public static void main(String args[]) { Class c = Lambda.class; Method[] m = c.getDeclaredMethods(); for (int i = 0; i < m.length; i++) { System.out.println(m[i].toString()); } } }
출력
public static void Lambda.main(java.lang.String[]) public java.lang.String Lambda.c() public void Lambda.a() public int Lambda.b()
-
(•́ ✖ •̀)
알 수 없는 사용자 -
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
-
-
자바의 Object 클래스는 자바의 모든 클래스의 공통 특성을 추출하여 만든 클래스입니다.
이 클래스가 가지고 있는 메소드는 자바의 다른 모든 클래스들이 상속받기 때문에 반드시 알아두시는 것이 좋은데요^
그 중에 getClass()는 객체가 속하는 클래스의 정보를 알아내는 메소드입니다. 객체가 속하는 클래스의 정보를 Class 타입의 객체로 만들어서 리턴해 줍니다.
Class cos = obj.getClass();
여기서 Class 타입은 JDK 라이브러리의 java.lang 패키지에 속하는 클래스 이름으로 클래스에 대한 여러 가지 정보를 담는 기능을 합니다. 이 클래스의 get이라는 이름으로 시작하는 메소드를 이용해서 해당 정보를 가져올 수 있습니다.
// Rectangle.java public class Rectangle { int width, height; Rectangle(int width, int height) { this.width = width; this.height = height; } int getArea() { return width * height; } }
// ObjectExample.java public class ObjectExample { public static void main(String[] args) { Rectangle obj = new Rectangle(10, 20); Class cos = obj.getClass(); String name = cls.getName(); // 클래스의 이름을 리턴 System.out.println("클래스 이름: " + name); Class superCls = cls.getSuperClass(); // 슈퍼클래스의 정보를 리턴 String superName = superCls.getName(); Field field[] = cos.getDeclaredFields(); // 클래스에 선언되어 있는 필드 정보를 가져옴 System.out.println("필드: "); for(int cnt = 0; cnt < field.length; cnt++) { System.out.println(" " + field[cnt]); } Method method[] = cls.getDeclaredMethods(); // 클래스에 선언되어 있는 메소드 정보를 가져옴 System.out.println("메소드: "); for(int cnt = 0; cnt < method.length; cnt++) { System.out.println(" " + method[cnt]); } } }
실행 결과는 다음과 같습니다.
클래스 이름: Rectangle 슈퍼클래스 이름: java.lang.Object 필드: int Rectangle.width int Rectangle.height 메소드: int Rectangle.getArea()
질문하신 문제를 해결하기 위해서는 Class 클래스의 getDeclaredMethods()를 사용해서 해당 메소드 정보를 얻어와서 사용하시면 되지 않을까요?^
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력