我问了一个关于两者之间差异的问题
public static <T> void work(Class<T> type, T instance);
和
public static <T, S extends T> void work(Class<T> type, S instance);
我想我应该解释一下我到底想知道什么。我认为这次更新原始问题不合适,所以我在这里问另一个问题。
说,我想创建一个反射方法来调用Marshallermarshal
中定义的那些方法,例如
void marshal(Object element, ContentHandler handler)
void marshal(Object element, File output)
void marshal(Object element, Node node)
等等。
我正在研究的一种方法是
void marshal(Object jaxbElement, Class<?> targetType, Object target)
实现很简单
- 查找方法看起来像
marshal(Ljava/lang/Object;Ljava/lang/Class;)V
和Object.class
targetType
element
使用和调用该方法target
。
所以任何单元测试代码都可以调用
marshal(element, ContentHandler.class, handler);
marshal(element, File.class, new File("text.xml"));
在这种情况下,我应该如何定义marshal
方法?有没有区别
<T> marshal(Object element, Class<T> targetType, T target);
和
<T, S extends T> marshal(Object element, Class<T> targetType, S target)
?
每个答案的进一步评论
我认为我需要targetType
寻找正确方法的快速直接方法。
没有targetType
我必须迭代所有方法,例如
for (Method method : Marshaller.class.getMethods()) {
// check modifiers, name, return type, and so on.
if (!method.getParameterTypes()[1].isAssignableFrom(target.getClass())) {
}
}
我认为为此添加另一个版本会更好。:)