2012-04-05 61 views
2

我有一個List<ParentObject>,其中ParentObject定義爲:不可修改的列表包裝它公開了一個不同的泛型類型

public class ParentObject 
{ 
    ChildObject child1; 
    // and other stuff... 
} 

我想揭露,通過構建一個包裝清單List<ParentObject>他人作​​爲不可修改List<ChildObject>

public class WrapperList implements List<ChildObject> 
{ 
    List<ParentObject> delegateList; 

    public WrapperList(List<ParentObject> delegateList) 
    { 
    this.delegateList = delegateList; 
    } 

    // fill in java.util.List methods... 
} 

我可以採取這種做法,使其工作,但是這似乎是它可能已經大體解決的問題。是否有一個現有的庫提供了我所提議的列表包裝?據推測,我會定義一個翻譯方法,告訴包裝清單如何從給定的ParentObject檢索ChildObject

最基本的問題是:這是一個好方法,還是有一個庫(番石榴或Apache共享收藏或什麼)已經提供了這樣的東西?

回答

4

最簡單的方法來做到這一點與番石榴將

return Collections.unmodifiableList(Lists.transform(parentList, 
    new Function<ParentObject, ChildObject>() {...})); 

(披露:我對番石榴貢獻。)

+0

優秀。正是我在找什麼。謝謝! – ulmangt 2012-04-05 15:11:21

2

而不是實現List,擴展AbstractList。如果它是不可修改的,你需要實現的只有size()get(int index),這很簡單。

AbstractList通過投擲UnsupportedOperationExceptions實現其餘部分。

我不知道任何通用列表,可以提供你所要求的,但它不會是複雜的構建(只是反射)。

1

我認爲你可以使用番石榴然後Collections.unmodifiableList。 在番石榴,使用Lists.transform

相關問題