-
[Java] 리플렉션 - 3 (클래스 정보 수정 또는 실행)Java 2020. 7. 26. 15:03
- 참고 : 인프런 >> 더 자바, 코드를 조작하는 다양한 방법, (백기선 강의)
Class 인스턴스 만들기 & 필드 접근하기
- > Class.newInstance() deperecated 됐으며 이제는 생성자를 통해 만들어야 함
생성자로 인스턴스 만들기
- Constructor.newInstance(params)
Class<?> bookClass = Class.forName("com.example.test.reflection.Book"); Constructor<?> constructor_arg0 = bookClass.getConstructor(); Book book_arg0 = (Book)constructor_arg0.newInstance();
필드 값 접근하기
- 특정 인스턴스 가지고 있는 값을 가져오는 것이기 때문에 인스턴스가 필요
- Field.get(object)
- Field.get(object,value)
- Filed.set(object, value)
Field b = Book.class.getDeclaredField("B"); b.setAccessible(true); String B = (String)b.get(new Book());
-> Static 필드를 가져올 때는 object가 없어도 되니 null을 넘기면 된다.
//A -> static field Field a = Book.class.getDeclaredField("A"); //set a.set(null,"AAAAA"); //get String A = (String)a.get(null);
메소드 실행하기
- Method.invoke(object, parmas)
Method method = Book.class.getDeclatedMethod("c"); c.setAccessible(true); c.invoke(book); //parameter를 넘겨줘야 하는 Method Method d = Book.class.getDeclatedMethod("d",int.calss,int.class); d.setAccessible(true); int res = (int)d.voke(book,1,2);
'Java' 카테고리의 다른 글
[Java] 리플렉션 - 5 (정리) (0) 2020.07.26 [Java] 리플렉션 - 4 (DI 프레임워크) (0) 2020.07.26 [Java] 리플렉션 - 2 (어노테이션) (0) 2020.07.25 [Java] 리플렉션 - 1 (Class<T>) (0) 2020.07.25 [Java] 람다식 - 표준 함수형 인터페이스를 사용해라 (0) 2020.07.19 댓글