我可以拥有LinkedHashSet的LinkedHashSet吗?

时间:2014-02-26 22:16:25

标签: java

我有很多不同类型的对象的LinkedHashSets从一个java类传递到另一个java类,我是否将它们打包在一个更大的对象中(如果可能的话,另一个链接的哈希集)或者我只是在正常情况下传递它们作为参数的方式?

2 个答案:

答案 0 :(得分:1)

是。例如:

LinkedHashSet<LinkedHashSet<String>>

答案 1 :(得分:1)

两者都有可能。

如果您将LinkedHashSet打包到另一个LinkedHashSet中,您可能会丢失类型信息,因为LinkedHashSet<LinkedHashSet<?>>是收集所有类型的LinkedHashSet的唯一方法地点。您也可以查看HashMap,因为通常情况下您会尝试访问特定的子LinkedHashSet;使用映射可以通过在公共类或接口中定义常量查找键来轻松实现。

如果在类之间总是传递相同的LinkedHashSet,则参数或参数对象通常是更好的解决方案,因为它们提供类型信息。参数对象的类可能如下所示

public class Parameters {
    private LinkedHashSet<String> namesSet = null;
    private LinkedHashSet<Locale> localesSet = null;

    public Parameters(LinkedHashSet<String> namesSet, LinkedHashSet<Locale> localesSet) {
        this.namesSet = namesSet;
        this.localesSet = localesSet;
    }

    public Parameters() {
    }

    public LinkedHashSet<String> getNamesSet() {
        return namesSet;
    }

    public void setNamesSet(LinkedHashSet<String> namesSet) {
        this.namesSet = namesSet;
    }

    public LinkedHashSet<Locale> getLocalesSet() {
        return localesSet;
    }

    public void setLocalesSet(LinkedHashSet<Locale> localesSet) {
        this.localesSet = localesSet;
    }
}

参数对象的优点是它们使方法签名保持简短并且可以传递;在通过并发线程更改这些对象时要小心; - )。