从非泛型方法调用泛型方法

时间:2013-11-11 04:53:32

标签: java generics

我有两种方法看起来像这样。一种是通用方法,另一种不是。

<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()中的typeinstance来呼叫b()

2 个答案:

答案 0 :(得分: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);
}
如果ClassCastException不是instance

Class.cast会抛出T(因此可能不需要您之前的检查)。

答案 1 :(得分:0)

例如像这样

a(String.class, new String("heloo"));