Gutyerrez
Gutyerrez

Reputation: 61

Object child class cast not works

i'm trying to cast my child user class but isn't works :/

I have an class declared with "User" name and a child class declared with "FUser", the FUser class:

public class FUser extends User {
    public static void main(String[] args) {
        User user = UserManager.generateUser(
                "HAHAHA",
                UUID.randomUUID()
        );

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

        FUser fUser = (FUser) user;
    }

    public FUser(User user) {
        super(
                user.getId(),
                user.getName(),
                user.getDisplayName(),
                user.getUniqueId(),
                user.getEmail(),
                user.getPassword(),
                user.getDiscordId(),
                user.isTwoFactorAuthenticationEnabled(),
                user.getTwoFactorAuthenticationCode(),
                user.getCreatedAt(),
                user.getFirstLogin(),
                user.getLastLogin(),
                user.getLastAddress(),
                user.getLastLobbyId(),
                user.getLanguageId(),
                user.getTwitterAccessToken(),
                user.getTwitterTokenSecret(),
                user.getGroups(),
                user.getPreferences(),
                user.getFriends(),
                user.getIgnored(),
                user.getReports(),
                user.getSkins(),
                user.isChangingSkin(),
                user.isWaitingTabListRefresh()
        );
    }
}

Executing this class the console shows this message:

{"unique_id":3ac5b89f-7b44-4c82-9631-831315d7962c,"last_login":null,"last_lobby_id":null,"name":"hahaha","created_at":1584532460820,"id":null,"last_address":null,"language_id":1,"display_name":"HAHAHA","email":null,"first_login":null,"discord_id":null}
Exception in thread "main" java.lang.ClassCastException: com.redecommunity.common.shared.permissions.user.data.User cannot be cast to com.redecommunity.factions.user.FUser
    at com.redecommunity.factions.user.FUser.main(FUser.java:20)`

Upvotes: 1

Views: 62

Answers (2)

ashakirov
ashakirov

Reputation: 12350

generateUser method returns User class object. You can't cast User class object to FUser class because FUser is not parent class of User. Thats why it throws ClassCastException.

Upvotes: 2

Alex Sveshnikov
Alex Sveshnikov

Reputation: 4329

As far as I understand your UserManager produces a User class. If you need it to be actually a FUser, you need to pass it to a constructor manually:

User user = new FUser(UserManager.generateUser(
           "HAHAHA",
           UUID.randomUUID()
    ));

Now user will be statically typed as User, but will actually keep a reference to FUser, so later the conversion of user to FUser type will not fail.

Upvotes: 1

Related Questions