2017-01-13 6 views
2

캐스트해야 할 이유는 일반적인 방법이 있습니다자바 일반 메소드의 인수 클래스가

public <T> boolean saveRow(T row, Class<T> rowClass) { 
    Mapper<T> rowMapper = mappingManager.mapper(rowClass); 
    rowMapper.save(row); 

    return true; 
} 

을 그리고 나는 row.getClass()에서 rowClass을 추론 할 수 있기 때문에 두 번째 매개 변수를 도랑 싶습니다.

public <T> boolean saveRow(T row) { 
    Mapper<T> rowMapper = mappingManager.mapper((Class<T>) row.getClass()); 
    rowMapper.save(row); 

    return true; 
} 

왜 캐스트가 필요하다 :

나는이 일을 할 수있는 유일한 방법은 row.getClass()(Class<T>) row.getClass()에 캐스팅입니다 것으로 나타났습니다?

감사합니다.

+1

(BalusC의 대답) https://stackoverflow.com/questions/7276096/getclass-of-a-generic-method-parameter-in-a-java –

답변

1

Class.getClass()은 제네릭을 인식하지 못하기 때문에
Class<?>Class<T>으로 대체 할 수 없습니다. 서명에

봐 :

public final native Class<?> getClass(); 
+0

감사합니다 많이! 서명을 확인하지 않은 N00b :) – Cristi

+0

당신은 환영합니다 :) 때때로 대답은 그리 멀지 않습니다. :) – davidxxx