以下用例是否被认为是反射的合理性?
有一堆从 XSD 生成的类(目前项目中有数百个)代表各种响应。
所有这些响应都包含通用响应数据结构,而不是对其进行扩展。
当发生超时等事件时,我只需要将单个字符串设置为特定值。
如果这些类正在扩展通用响应结构,我总是可以设置此响应代码而无需反射,但事实并非如此。
因此,我为我的服务编写了简单的实用程序,它使用反射来获取 String 字段的 setter 方法并使用预定义的值调用它。我唯一知道的替代方法是使用特定于类的方法来复制代码来处理超时,唯一的区别是返回的 Response 类。
protected T handleTimeout(Class<T> timeoutClass) {
try {
T timeout = timeoutClass.newInstance();
Method setCode = timeoutClass.getDeclaredMethod(SET_RESPONSE_CODE, String.class);
setCode.invoke(timeout, Response.TIMEOUT.getCode());
return timeout;
} catch (InstantiationException | IllegalAccessException | SecurityException | NoSuchMethodException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
throw new RuntimeException("Response classes must have field: \"code\" !");
}
}
相关事实:
- 这个 setter 方法永远不应该改变,因为它需要对数百个接口进行返工
有人可以指出我是否遗漏了一些陷阱,或者是否有替代的反射解决方案可以达到相同的结果?
编辑:我根本没有权限在 XSD 上完成任何更改,因此任何解决方案都必须在本地完成。序列化此类对象应该没有问题,因为它们在组件之间共享。