以前の答えと矛盾する特定のケースの解決策を見つけたようです。コードは次のとおりです(機能します)。
interface Processor<I,O>
{
public O process();
}
abstract class SimpleProcessImpl<I,O> implements Processor<I,O>
{
List<Processor> _upstream = new ArrayList<Processor>();
@SuppressWarnings("unchecked")
public I getInput()
{
Object value = _upstream.get(0).process();
ParameterizedType t = (ParameterizedType) getClass().getGenericSuperclass();
Class dstClass = (Class) t.getActualTypeArguments()[0];
Class srcClass = value.getClass();
System.out.println(srcClass.getName() + " -> " + dstClass.getName());
if (dstClass == String.class && srcClass == String.class) {
return (I) value;
}
if (dstClass == String.class) {
return (I) value.toString();
}
if (srcClass == String.class && dstClass == Integer.class) {
String valueStr = (String) value;
Integer valueInt = Integer.parseInt(valueStr);
return (I) valueInt;
}
if (srcClass == String.class && dstClass == Long.class) {
String valueStr = (String) value;
Long valueInt = Long.parseLong(valueStr);
return (I) valueInt;
}
return (I) value;
}
}