有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java泛型是否可以在运行时检查?

// @SuppressWarnings("unchecked")
private <T> T extractResult(Continuation continuation) {
    Object result = continuation.getAttribute("result");
    return (T) result;
}

(在运行时)是否可以验证result是否可以强制转换为T


共 (5) 个答案

  1. # 1 楼答案

    否。要在运行时进行检查,您需要一个类的实例,以便可以使用isAssignableFrom。由于类型擦除,您无法使用T访问此文件

  2. # 2 楼答案

    不在这个方法中。与T相关的所有类型信息都将被编译器擦除

  3. # 3 楼答案

    类型擦除将在运行时用Object替换T。类型信息在运行时将不存在,因此无法对照类型进行检查

  4. # 4 楼答案

    您可以通过正式尝试捕获ClassCastException来检查它。 然而,这并不能使警告消失

  5. # 5 楼答案

    这在运行时是可能的,但您需要一个泛型类型令牌。通常将其传递到泛型类型的构造函数中

    class SomeGeneric<T>
    
    private Class<T> token;
    
    public SomeGeneric(Class<T> token) {
        this.token=token;
    }
    

    然后在方法中,您可以在运行时检查它

    return token.cast(result) // throws ClassCastException