Groovy замыкание для сложного объекта prblm stateme2 - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть интерфейс Java

    public interface IPerson {
      Person  addPerson(String name );
      Person  addPerson(String name1,String name2);
      Person  addPerson(String name,String[] details);
      Person  addPerson(String name,String name1,String[] details);
      Person  addPerson(String name,List<String> details);
    }

С PersonImpl .java:

class PersonImpl implemets Iperson {
       ..
  // and interface methods implemtation

}

и мой person.java выглядит как

class Person {
    def firstName;
    def lastName;
}

А мой PersonTest.groovy выглядит как

def PersonImpl   person  = new PersonImpl();

person.addPerson("anish")
person.addPerson("anish","nath")
person.addPerson("john","smith")
person.addPerson("tim","yates")
def list=[];
list.add("abc")
list.add("qpr")
person.addPerson("anish",list)
person.addPerson("nath","11", [".docsDevNmAccessStatus.1", "Integer", "4"])
person.addPerson("nath","11", [".docsDevNmAccessStatus.1", "String", "4"])

Есть ли способ определить DSL для этого интерфейса, чтобы я легко вызывал addOperation?

Проблема в том, чтоIPerson интерфейс не может быть изменен.

как я могу написать dsl что-то вроде

addPerson "anihs" "nath" //call to person.addPerson("anish","nath")
addPerson "tim" "kates" 

//simlary of other interface method any suggestion

1 Ответ

0 голосов
/ 01 октября 2011

В Groovy что-то вроде addPerson "anihs" "nath" не разрешено. Если вам нужны два аргумента, вам придется использовать запятую. Так что лучшее, что вы можете получить, это addPerson "anihs", "nath". Но вызовы этого метода просто зависают, контекст отсутствует. Конечно, будет достаточно простой версии:

def PersonImpl person = new PersonImpl();
person.with {
  addPerson "anish"
  addPerson "anish","nath"
  addPerson "john","smith"
  addPerson "tim","yates"
  def list = ["abc", "qpr"]
  addPerson "anish",list
  addPerson "nath","11", [".docsDevNmAccessStatus.1", "Integer", "4"]
  addPerson "nath","11", [".docsDevNmAccessStatus.1", "String", "4"]
}

хотя я не уверен, что вам этого достаточно.

...