The Adapter interface: public interface NameAdaptable<T> { public String getName(T obj); }
The IPropertySelectionModel impl class: public class PropertySelectionModel<T> implements IPropertySelectionModel { private final NameAdaptable<T> nameAdapter; private final List<T> items; public PropertySelectionModel(NameAdaptable<T> nameAdaptable,Collection<T> items){ this.nameAdapter = nameAdaptable; this.items= new ArrayList<T>(items.size()); this.items.addAll(items); } public int getOptionCount() { return items.size(); } public Object getOption(int index) { return getItem(index); } public String getLabel(int index) { T item = getItem(index); return nameAdapter.getName(item); } public String getValue(int index) { return String.valueOf(index); } public Object translateValue(String value) { return getOption(Integer.parseInt(value)); } public T getFirstItem(){ return getItem(0); } private T getItem(int index){ if(index>items.size()) index = items.size(); return items.get(index); } } Try User it: Collection<Pojo> pojos= service.getPojos(...); return new PropertySelectionModel<Pojo>(new NameAdaptable<Pojo>(){...},pojos); Any ideas?