如何基於類參數實例化新的泛型類? 我的主類看起來如下:如何基於Java中的類參數實例化泛型類
public class ServiceTransformer<SERVICE_I, SERVICE_O> extends Loggable {
private Class<SERVICE_I> serviceInputClass;
private Class<SERVICE_O> serviceOutputClass;
public ServiceTransformer(Logger logger, String inputXslt, String outputXslt, String appRoot) {
try {
serviceInputClass = (Class<SERVICE_I>) getGenericTypeClass(0);
serviceOutputClass = (Class<SERVICE_O>) getGenericTypeClass(1);
} catch (BadConfigurationException ex) {
LOGGER.error("@@@ ConfigBase() Constructor Exception => ", ex);
} catch (MalformedURLException ex) {
LOGGER.error("@@@ ConfigBase() Constructor Exception => ", ex);
}
}
private Type getGenericTypeClass(int index) {
try {
return ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[index];
} catch (Exception ex) {
LOGGER.error("@@@ getGenericTypeClass() Exception => ", ex);
}
return null;
}
}
我實例化一個新的ServiceTransformer
類,如下所示:
ServiceTransformer<ReactivatePrepaidSubscriberInput, ReactivatePrepaidSubcriberOutput> service =
new ServiceTransformer<ReactivatePrepaidSubscriberInput, ReactivatePrepaidSubcriberOutput>(
LOGGER, inputFile, outputFile, APPROOT);
我目前得到的錯誤是java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
不知道我在哪裏出錯了。
解決了!你會建議如何處置這些新創建的匿名類? –
這是不可能的 - 它們是在編譯期間生成的(你會看到它們是'SurroundingClass $ 1.class','SurroundingClass $ 2.class'等等),一旦它們被加載,它們就會留在內存中。但我不會擔心它,除非你正在創建數以千計的匿名類。如果您經常使用一組固定的''類型,請爲其創建適當的頂級命名子類並重復使用它,如其他答案中的建議。例如。如果經常使用組合,類StringIntTransformer擴展了ServiceTransformer 。 –