#scala #generics #builder
#scala #дженерики #Конструктор
Вопрос:
У меня есть куча сторонних классов, эти классы автоматически генерируются в java и не имеют никакой иерархии
Вот RulesPropertyList
enum RulesPropertyType {...} class RulesPropertyValue {...} class RulesProperty { public RulesPropertyType getPropertyTypeCode(){...} public RulesPropertyValue getPropertyValue() {...} } class RulesPropertyList { public void setNumProperties(int numProperties) public void setProperties(RulesProperty[] properties) }
И его Characs*
родной брат
enum CharacsPropertyType {...} class CharacsPropertyValue {...} class CharacsProperty { public CharacsPropertyType getPropertyTypeCode(){...} public CharacsPropertyValue getPropertyValue() {...} } class CharacsPropertyList { public void setNumProperties(int numProperties) public void setProperties(CharacsProperty[] properties) }
Существует больше, чем просто Rules*
Characs*
семейства классов, и классы на самом деле имеют больше полей и более глубокие структуры.
Все классы полностью идентичны, за исключением префиксов в именах классов.
В настоящее время у меня есть отдельный метод построения для каждого набора классов.
def buildRulesPropertyList(props: (RulesPropertyType, RulesPropertValue): RulesPropertyList = { val properties = props.map { case (type, value) =gt; RulesProperty(type, value) } val propList = RulesPropertyList propList.setProperties(properties.toArray) propList.setNumProperties(properties.length) propList }
Я должен создать такой конструктор для каждого семейства классов.
Теперь я вижу только возможность создать универсальный конструктор с использованием отражения.
Есть ли в Scala способ создать такого конструктора, используя универсальные шаблоны на языке Scala?
Ответ №1:
Есть ли в Scala способ создать такого конструктора, используя универсальные шаблоны на языке Scala?
да, но я не думаю, что это будет меньше кода. Я думаю, что ваш лучший ход здесь-просто написать несколько простых генераций кода для каждого типа. вы бы скормили ему список фамилий, например, и попросили бы его изложить ваши методы. Seq("Rules", "Characs", ...)
build${family}PropertyList
Комментарии:
1. Это вариант, попробую. Спасибо!