2

私はこのように見える2つの方法を持っています。1 つは一般的な方法で、もう 1 つはそうではありません。

<T> void a(final Class<T> type, final T instance) {
}
void b(final Class<?> type, final Object instance) {

    if (!Objects.requireNotNull(type).isInstance(instance)) {
        throw new IllegalArgumentException(instance + " is not an instance of " + type);
    }

    // How can I call a(type, instance)?
}

からとを呼び出すa()にはどうすればよいですか?typeinstanceb()

4

2 に答える 2

5

一般的なヘルパー メソッドを使用します。

void b(final Class<?> type, final Object instance) {

    if (!type.isInstance(instance)) {
        // throw exception
    }

    bHelper(type, instance);
}

private <T> void bHelper(final Class<T> type, final Object instance) {
    final T t = type.cast(instance);
    a(type, t);
}

Class.castClassCastExceptiona でない場合instanceはa をスローしTます (したがって、以前のチェックは必要ない場合があります)。

于 2013-11-11T05:01:57.810 に答える
0

たとえば、このように

a(String.class, new String("heloo"));
于 2013-11-11T05:00:02.973 に答える