인프런 커뮤니티 질문&답변

보물섬님의 프로필 이미지
보물섬

작성한 질문수

더 자바, 코드를 조작하는 다양한 방법

리플렉션 API 2부: 클래스 정보 수정 또는 실행

제네릭을 쓰는 클래스 생성방법은 없나요?

작성

·

356

0

안녕하세요.

강좌 잘 보고 있습니다.

강좌를 보고 실습하고 있는데요.

제가 좀 변태적인 취향인지라...

제네릭한 클래스를 newInstance 를 이용해서 생성하려고

하는데요. 어떻게 해야할지 도통 감이 안잡히네요.

답변 3

0

List<String> iAmList = new ArrayList<>();
Constructor<List<String>> constructor = (Constructor<List<String>>) Class.forName("java.util.ArrayList").getConstructor(null);
List<String> amIList = constructor.newInstance();

0

보물섬님의 프로필 이미지
보물섬
질문자

네. 맞습니다.

예를 들어 만약 ArrayList<String> 이란 클래스를 생성하고 싶은데요.

일단 방향이 맞는지는 모르겠지만 super type token 이란것 까지는 알게 되었는데요.. ParameterizedType 를 이용해서 RowType 인 ArrayList 와 TypeArgument 인 String 까지 구하는법은 알아냈는데요.

ArrayLIst 와 String 을 알아냈는것 까지는 좋았는데

ArrayList 야 RowType 으로  ((Class<?)rowType)getConstructor(null).newInstance() 이런식으로  인스턴스를 만든다고 하면 거기다 제네릭값을 어떻게 줘야 하는지 감이 안잡히네요.

제가 글주변이 없어서 소스상으로 말씀드리면

public void createList(Class<?> clazz) {
	List<clazz> list = new ArrayList<>(); ???
	Constructor<List<clazz>> constructor = Class.forName("java.util.ArrayList").getConstructor(null); ???
	constructor.newInstance(); ???
}

위와 같은 방법으로 제네릭 클래스를 만들고 싶어서요. 

0

백기선님의 프로필 이미지
백기선
지식공유자

제네릭한 클래스가 혹시 Class<T> 이런 클래스 말하시는건가요? 그냥 생성자 가지고 인스턴스 생성하면 되는데 무슨 차이가 있을꺼라 생각하시는지요.

보물섬님의 프로필 이미지
보물섬

작성한 질문수

질문하기