我有两种方法看起来像这样。一种是通用方法,另一种不是。
<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()
中的type
和instance
来呼叫b()
?
答案 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"));