2013-08-11 2 views
1

Как я могу представить общие типы в одной коллекции?Коллекция для общих типов

public interface Rule<T> { 
    String execute(T dataProvider); 
} 

public interface DataProvider { 
    // No common functions as of now 
} 

public class RulesExecutor { 
    private Map<String, List<Rule>> documentToRuleListMap; 
    public RulesExecutor(Map<String, List<Rule>> documentToRuleListMap) { 
     this.documentToRuleListMap = documentToRuleListMap; 
    } 

    public executeRules(DataProvider dataProvider, String document) { 
     // some logic here 
    } 
} 

Можно хранить карту, как показано на RulesExecutor sconstructor?

Если нет, то какова правильная структура данных для хранения этой информации?

ответ

1

Возможно ли сохранить карту, как показано в Регламенте Executor? Если нет, какова правильная структура данных для хранения этой информации?

Sure:

public interface Rule<T> { 
    String execute(T dataProvider) 
} 


public interface DataProvider { 

} 


class RulesExecutor<T extends DataProvider> { 

    public RulesExecutor(Map<String, List<Rule<T>>> documentToRuleListMap) { 
    } 

    public void executeRules(T dataProvider) { 
    // some logic here 
    }; 
} 

Обратите внимание, что отправил код не будет компилироваться из-за небрежные ошибки:

public interface Rule<T> { 
    String execute(T dataProvider) // *** missing semicolon 
} 


public interface DataProvider { 

} 

public class RulesExecutor() { // *** class declarations have no parenthesis 

Пожалуйста, быть более осторожными при размещении кода и убедитесь, почта реальный код, не вид, вид код. Это облегчает понимание вашей проблемы и помощь, когда вы это делаете.

+2

Если 'executeRules' будет применять правила к' DataProvider', то типы должны быть более жесткими. Вероятно, ограничение на 'RulesExecutor' хочет быть' ', а параметр' dataProvider' для 'executeRules' хочет иметь тип' T'. –

+0

Таким образом, мой RulesExecutor станет конкретным для определенного правила. Тем не менее, моя идея правила заключается в следующем: 1. Храните документ в RuleListMapping 2. Чтобы выполнить список правил, соответствующих документу, при передаче документа в качестве ввода – user1269701

+0

@TomAnderson: спасибо за призывы! –