ParameterizedType parameterized =
(ParameterizedType) List.class.getMethod("iterator").getGenericReturnType();
Type raw = parameterized.getRawType();
Run Code Online (Sandbox Code Playgroud)
ParameterizedType#getRawType()返回a Type,而不是a Class<?>(虽然我java.lang.Class现在已经实现Type).有没有一个很好的理由为什么getRawType()不声明它的返回类型Class<?>?是否存在getRawType()可能不是结果的极端情况Class<?>?
这已经足够让人感到挣扎j.l.r.Type; 这似乎是一个他们本可以为我们拯救一个沮丧的实例.
irr*_*ble 13
它必须返回一个Class对象,没有别的办法.
为什么?谁知道,也许是一些理想主义的偏见.如果它返回Class,它将是Class新Type接口中唯一的外观.
真正的问题是混合Class和Type.以前,所有类型都代表Class.它已经很乱了,但仍然可以容忍.种类不多.
使用新的泛型类型,他们应该设计一个更清晰,更符合规范的Type层次结构Class.相反,他们成立Class有Type创造更多的混乱.整个层次结构都没有意义.任何对该主题不熟悉并且不了解历史的人都会被这种废话吓到.
我不会把设计保持在Type高标准.例如,ParameterizedType定义equals(),但不是hashCode().ParameterizedType在一个哈希映射中没有办法实现两个工作.而通配符也是一种类型?一定不行.
而这个方法的名称getRawType()只是愚蠢的.它与此无关raw type.它应该清楚地命名getClassOrInterface().会不会太冗长?getActualTypeArguments()那么看看.(是的,它会返回实际的论点!不是假的!)
我正在思考这个问题,我有一种预感。也许他们想为未来的疯狂留下可能性,如下所示:
public class Z<L extends List<?>> {
L<Double> test;
}
Run Code Online (Sandbox Code Playgroud)
这不是合法的 Java 代码,但我认为它的含义很清楚;new Z<ArrayList<?>>().test将是 类型ArrayList<Double>。
如果这是合法的,((ParameterizedType) test.getGenericType()).getRawType()将返回一个TypeVariable.
| 归档时间: |
|
| 查看次数: |
3440 次 |
| 最近记录: |