2012-04-05 19 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

相关问题