将超类向下转换为子类通过 instanceof 但遇到 ClassCastException

白船

我有两个对象,User 和 CustomUserDetails,它们扩展了 User 并实现了 org.springframework.security.core.userdetails.UserDetails;

在我的存储库层,我调用我的内存数据库并检索用户。

public User findByUsername(String username) {
    CustomUserDetails customUserDetails = new CustomUserDetails();
    User user = em.createQuery("from User where username = :username", User.class)
            .setParameter("username", username).getSingleResult();

    System.out.println(user.toString());

    if(customUserDetails instanceof User) {
        System.out.println("CustomUserDetails instance of User");
        customUserDetails = (CustomUserDetails) user;
        return customUserDetails;
    } else {
        System.out.println("CustomUserDetails is not instance of User");
        throw new ClassCastException();
    }
}

这是我的控制台输出

ID: 1, USERNAME : [email protected], PASSWORD: gojoe, LIST<ROLE>: ROLE_ADMIN
CustomUserDetails instance of User
java.lang.ClassCastException: model.User cannot be cast to model.CustomUserDetails

为什么即使我通过了 instanceof 检查,我也无法从 User 向下转换为 CustomUserDetails?UserDetails 接口类是否妨碍了我成功转换?

芬曼

您正在尝试投射

customUserDetails = (CustomUserDetails) user;

但用户不是那个实例,用户是用户的实例。尝试向 User 类添加一个 getter 以获取 CustomUserDetails 或使用if(user instanceof CustomUserDetails){...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通用集合中的ClassCastException与instanceOf

在instanceof返回true之后,如何发生ClassCastException

将超类的对象强制转换为子类-向下转换

Java向下转换ClassCastException错误

Neo4J Jaccard相似性遇到ClassCastException

用类检查 instanceof

ClassCastException:String 不能转换为

对于子类,instanceof返回false

如何使超类查询集返回子类对象?还是将超类查询集向下转换为子类列表?

实现类的ClassCastException

Java中的向下转换抛出ClassCastException

java.lang.ClassCastException:我无法将超对象转换为子对象

无法将超类转换为子类

将超类的对象转换为子类

Java:ClassCastException; 将Player类强制转换为扩展Player的类

Java .equals()instanceof子类?为什么不调用超类等于而不是将其最终化呢?

使用不带instanceof的超类集合中的子类实现的接口

遇到类路径错误

转换为同一类时的ClassCastException

DispatcherServlet 不能转换为类 jakarta.servlet.Servlet (ClassCastException)

如何通过方法调用(ClassCastException)从对象强制转换类

ClassCastException NimbusJwtDecoder无法转换为NimbusJwtDecoderJwkSupport

塞子| ClassCastException不能强制转换为胸部

ClassCastException $ Proxy无法转换为使用aop

ClassCastException:NoClassDefFoundError无法强制转换为RuntimeException

ClassCastException:无法将DispatcherServlet强制转换为Servlet

ElasticSearch ClassCastException-将MappingMetadata转换为MappingMetadata

无法将活动强制转换为Interface(ClassCastException)

Spring Integration MongoDbStoringMessageHandler ClassCastException:无法将 BasicDBObject 转换为 BasicDBList