自定义HashMap,通过继承实现

3

问题:如何创建一个自定义的HashMap类,继承HashMap,并且能够像普通HashMap一样进行操作?

让我解释一下。根据这个问题,你可以通过继承ArrayList并编写自己的方法来创建自定义的ArrayLists方法。那么如何在HashMaps中实现呢?

我想创建一个UserList类,可以使用UserList users = new HashMap<Users, Integer>进行初始化。这是目前为止我创建的UserList类:

public class UserList extends HashMap<Users, Integer> {

    public Users getUser(UUID uuid) {
        for (Users u: keySet()) {
            if (u.getUuid().equals(uuid))
                return u;
        }

        return null;
    }

    public Boolean containsPlayer(UUID uuid) {
        for (Users u: keySet()) {
            if (u.getUuid().equals(uuid))
                return true;
        }

        return false;
    }

    public Users removeUser(UUID uuid) {
        for (Users u: keySet()) {
            if (u.getUuid().equals(uuid)) {
                remove(u);
                return u;
            }
        }

        return null;
    }
}
但是每当我在主类中键入“private UserList listOfUsers = new HashMap<Users,Integer>;”时,它会弹出不兼容类型错误。我怎样才能解决这个问题?我记得以前学过这个,但现在忘记了。 谢谢

你不能将父类对象分配给子类。这里HashMap是父类,UserList是子类。你应该使用UserList listOfUsers = new UserList(); - Rakesh Soni
2个回答

3

UserList users = new UserList(),不需要其他的内容。

通过扩展HashMap,您已经告诉编译器UserList是一个HashMap

作为一种建议,您可能希望考虑组合作为替代设计:组合优于继承


1
每个人都会遇到这种情况 :) - orirab

0

我知道你的问题是关于扩展HashMap的,但你可以通过将HashMap实现封装在你的对象内部来实现相同的功能:

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class UserList  {
    private Map<UUID, Users> users;

    public UserList() {
        this.users = new HashMap<>();
    }

    public Users getUser(UUID uuid) {
        return this.users.getOrDefault(uuid, null);
    }

    public Users removeUser(UUID uuui){
        return this.users.remove(uuui);
    }

    public Boolean containsPlayer(UUID uuid) {
        return this.users.keySet().contains(uuid);
    }

    public Users addUser(UUID uuid, Users users) {
        return this.users.put(uuid, users);
    }
}

class Users{}

class Main{
    public static void main(String[] args) {
        UserList userList = new UserList();
        UUID uuid = UUID.randomUUID();
        Users users = new Users();
        userList.addUser(uuid, users);
        userList.removeUser(uuid);
        userList.containsPlayer(uuid);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,