inbound
が型宣言で型パラメーターを定義するクラスである場合にのみ、型パラメーターを見つけることができます。たとえば、次のNodeList
ように宣言された のインスタンスをシリアライズしたとします。
final class NodeList extends ArrayList<Node> { }
次に、デシリアライズすると、次のことができます。
Object inbound = ois.readObject();
if (inbound instanceof List<?>) {
Type t = inbound.getClass().getGenericSuperclass();
if (t instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) t;
for (Type p : pt.getActualTypeArguments()) {
if (p instanceof TypeVariable<?>)
System.out.println("Unknown");
else
System.out.println(p); /* Prints "interface Node" */
}
}
}