2014-02-26 65 views
0

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

回答

1

两者都是可能的。

如果包装LinkedHashSet s转换为其他LinkedHashSet你可能失去类型信息LinkedHashSet<LinkedHashSet<?>>是收集各种LinkedHashSet S IN一个地方的唯一途径。您也可以查看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; 
    } 
} 

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

+1

我采用了参数类解决方案:) –

1

是的。例如:

LinkedHashSet<LinkedHashSet<String>> 
+0

但它们并不都是LinkedHashSet - 其中一些是LinkedHashSet 其他的是LinkedHashSet 等等。 –

+0

如果你有一个共同的超类或接口,你总是可以使用Object或其他类。 – JustinKSU

相关问题