나는 다음 클래스 org.apache.poi.hssf.usermodel.HSSFCell
다음 사용하고 동안 올바른 방법 서명을 확인합니다다음 방법의 목록, 런타임
void setCellValue(boolean value)
void setCellValue(java.util.Calendar value)
void setCellValue(java.util.Date value)
void setCellValue(double value)
void setCellValue(HSSFRichTextString value)
void setCellValue(java.util.Calendar value)
void setCellValue(HSSFRichTextString value)
는 점에 유의 걸릴 방법 매개 변수로 개체와 메서드는 없습니다.
이제 컴파일 된 시간에 값 클래스 유형을 결정할 방법이 없습니다. 나는 런타임 동안 나의 가치 클래스 유형만을 결정할 수있다. 따라서 컴파일 된 시간 동안 메서드 시그니처를 모르는 경우 어떻게 호출 할 올바른 메서드를 결정할 수 있습니까?
내 코드는 다음과 같습니다 :
final int rowCount = tableModel.getRowCount();
for (int i = 0; i < rowCount; i++) {
final HSSFRow row = sheet.createRow(i + 1);
for (int j = 0; j < columnCount; j++) {
final Object object = tableModel.getValueAt(i, j);
final Class myClass = tableModel.getColumnClass(j);
// How to perform casting during compiled time, and invoke
// the setCellValue with correct signature?
if (object != null) {
row.createCell(j).setCellValue(??); // Does not accept Object!
}
}
}
이 경우 ... 다른 instanceof
와 아마 추한 내 문제를 해결하는 것입니다. 그러나, 만약 내가 추한 것을 원하지 않는다면 ... instanceof
으로, 그렇게 할 수있는 더 좋은 방법이 있습니까?
꽤 악마 적입니다. 완전성을 위해, 당신은 실제로 적절한 방법을 찾고 그 매개 변수로 호출하는 스 니펫을 게시 할 수 있습니까? 또한 'map'을 typeToOverload와 같은 것으로 이름을 바꿔 조금 더 명확하게 만들 수 있습니까? –
언뜻보기에이 솔루션은 TofuBeer 's에 비해 복잡하다고 생각했습니다. 몇 가지 상세한 연구를 마친 후, 나는 그것이 2 가지 추가 사례를 다루고 있음을 깨달았다. (1) 원시적 방법 매개 변수 (2) 수퍼 클래스와 인터페이스. 따라서 나는 대답으로 그것을 받아들이기로 결정했다. –
주목해야 할 한 가지 더 : if (clazzes [0] .isPrimitive()) { handlePrimitive (method, clazzes [0]); } 로 작성해야합니까? if (clazzes [0] .isPrimitive()) { handlePrimitive (method, clazzes [0]); 계속; } –