你应该在Java中扩展ArrayList

0 java arraylist

我有一个枚举的ArrayList,但我需要确保只有一个特定的枚举(或任何它的名字).我应该创建一个扩展ArrayList的新类并检查输入吗?我已经看到,也许最好不要(你能用Java扩展ArrayList吗?)但是我看不到更好的方法.

我的枚举

enum myEnum{
    SPECIAL,
    OTHER1,
    OTHER2,//etc
}
Run Code Online (Sandbox Code Playgroud)

使用ArrayList

List<myEnum> list = new ArrayList<>();
list.add(myEnum.SPECIAL);
list.add(myEnum.OTHER1);
list.add(myEnum.SPECIAL);//OH NO!!!
Run Code Online (Sandbox Code Playgroud)

没有ArrayList

class myList extends ArrayList<myEnum> {

    @Override
    public boolean addAll(int i, Collection<? extends myEnum> clctn) {
        if(check()){
            super.addAll(i, clctn);
        }else{
            //do something or throw error;
        }
    }

    @Override
    public boolean addAll(Collection<? extends myEnum> clctn) {
        if(check()){
            super.addAll(clctn);
        }else{
            //do something or throw error;
        }
    }

    @Override
    public void add(int i, myEnum e) {
        if(check()){
            super.add(i, e);
        }else{
            //do something or throw error;
        }
    }

    @Override
    public boolean add(myEnum e) {
        if(check()){
            return super.add(e);
        }else{
            //do something or throw error;
        }

    }

    boolean check(){
        //do stuff
    }
}

myList list = new myList();
list.add(myEnum.SPECIAL);
list.add(myEnum.OTHER1);
list.add(myEnum.SPECIAL);//something happens or error is thrown
Run Code Online (Sandbox Code Playgroud)

有更好的方法还是可接受的?

FTh*_*son 5

在您的情况下,您不应该扩展ArrayList.

正如@ John3136在评论中所述,a Set是一个为您处理唯一性的集合.Java提供EnumSet了一个专门用于有效处理枚举的集合.使用枚举时,请使用此而不是其他实现HashSet.