Объект дочернего класса приведен не работает - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь привести мой дочерний пользовательский класс, но он не работает: /

У меня есть класс, объявленный с именем «Пользователь», и дочерний класс, объявленный с «FUser», класс FUser:

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()
        );
    }
}

При выполнении этого класса консоль выводит следующее сообщение:

{"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)`

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

generateUser метод возвращает User объект класса. Вы не можете преобразовать User объект класса в FUser класс, потому что FUser не является родительским классом User. Вот почему он выбрасывает ClassCastException.

0 голосов
/ 18 марта 2020

Насколько я понимаю, ваш UserManager создает класс User. Если вам нужно, чтобы он был фактически FUser, вам нужно передать его конструктору вручную:

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

Теперь пользователь будет статически набираться как User, но фактически будет сохранять ссылку на FUser поэтому в дальнейшем преобразование типа user в FUser не завершится неудачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...