Giriş
Şu satırı dahil ederiz.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Örnek
Elimizde generic bir kod olsun
Şu satırı dahil ederiz.
import com.google.common.reflect.TypeToken;
Açıklaması şöyle.We can use the TypeToken class to capture an actual type of generic list and check if they really can be referenced by the same referenceconstructor
Örnek
Şöyle yaparız.
TypeToken<?> propTt = new TypeToken<List<? extends Number>>() {};
getTypes metoduŞöyle yaparız.
final Set<TypeToken> tt = TypeToken.of(cls).getTypes().interfaces();
isSupertypeOf metoduŞöyle yaparız.
private static boolean isAssignable(TypeToken<?> resolved, Class<?> implClass) {
return resolved.isSupertypeOf(implClass) ||
isAnySupertypeAssignable(resolved, implClass);
}
private static boolean isAnySupertypeAssignable(TypeToken<?> resolved,
Class<?> implClass) {
return TypeToken.of(implClass).getTypes().stream()
.anyMatch(supertype -> isUncheckedSupertype(resolved, supertype));
}
private static boolean isUncheckedSupertype(TypeToken<?> resolved,
TypeToken<?> implTypeToken) {
if (implTypeToken.getType() instanceof ParameterizedType) {
return false;
// this prevents assignments of Collection<Integer> to Collection<Timestamp>
}
try {
resolved.getSubtype(implTypeToken.getRawType());
return true;
} catch (IllegalArgumentException ex) {
return false;
}
}
resolveType metodu
Örnek
Elimizde generic bir kod olsun
package net.redpoint.scratch;
public class Base<E> {
public E getE() { return null; }
}
Generic tipi gerçekleştiren bir sınıf olsunpublic class Derived extends Base<String> {}
Kalıtan sınıfın getE metodunun hangi parametre olduğunu bulmak için şöyle yaparız.Type returnType =
new TypeToken<Derived>() {}
.resolveType(Base.class.getMethod("getE").getGenericReturnType());
Hiç yorum yok:
Yorum Gönder