2015-07-10 60 views
0

我有下面的類:如何重構與多個列表+ getter和setter一類爲每個列表

public class RefactorMe { 

    private static List<Event<Apple>> mAppleEventList = new ArrayList<Event<Apple>>(); 
    private static List<Event<Banana>> mBananaEventList = new ArrayList<Event<Banana>>(); 
    private static List<Event<Orange>> mOrangeEventList = new ArrayList<Event<Orange>>(); 

    public static List<Event<Apple>> getAppleList() { 
    return mAppleEventList; 
    } 

    public static List<Event<Banana>> getBananaEventList() { 
    return mBananaEventList; 
    } 

    public static List<Event<Orange> getOrangeList() { 
    return mOrangeEventList; 
    } 

    public static void addAppleEvent(Event<Apple> pEvent) { 
    mAppleEventList.add(pEvent); 
    } 

    public static void addBananaEvent(Event<Banana> pEvent) { 
    mBananaEventList.add(pEvent); 
    } 

    public static void addOrangeEvent(Event<Orange> pEvent) { 
    mOrangeEventList.add(pEvent); 
    } 

} 

我嘗試使用Visitor模式重構,但不能得到它,因爲仿製藥的工作.. 有一個更好的方法嗎?

+4

什麼是你的重構的目標是什麼? –

+1

我不明白你試圖做什麼,什麼是不行的。 – 2015-07-10 09:19:35

+2

你可以把你的列表放在地圖上,是否有可能從'Event '對象獲得'Apple.class'? – user902383

回答

2

通過這裏使用的地圖繼@ user902383在Java 7中你的解決方案:

public class RefactorMe { 
    class Event<K> { 
    public K getNewObject() { 
     return null; 
    } 
    } 

    private static Map<Class<?>, List<Event<?>>> eventLists = new HashMap<>(); 

    public static <E> List<Event<E>> getEventList(Class<E> clazz) { 
    return (List) eventLists.get(clazz); 
    } 

    public static <E extends Event<E>> void addEvent(Event<E> pEvent) { 
    Class<E> key = (Class<E>) pEvent.getNewObject().getClass(); 
    List<Event<?>> events = eventLists.get(key); 
    if (events == null) { 
     events = new ArrayList<>(); 
     eventLists.put(key, events); 
    } 
    events.add(pEvent); 
    } 
} 
+0

感謝您的回答。但它並沒有爲我編譯:「無法從列表>到列表>」列表中的「getContentList方法」和「類型不匹配:無法從Class 轉換爲類」addEvent方法。我之前嘗試過一些類似的命令,我無法繞過這些編譯器錯誤。猜猜這個任務不是爲了泛型而做的。 – registaid

+0

對不起,我沒有在發佈前編譯代碼。 – JnRouvignac

+0

我更新了代碼以使其編譯。 – JnRouvignac