の違いについて質問しました。
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)
等々。
私が取り組んでいる方法の1つは
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())) {
}
}
これに別のバージョンを追加する方が良いと思います。:)