2011-09-20 30 views
0

我有一个Java接口对复杂对象prblm常规闭合stateme2

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类似

​​
+0

您还没有指定PersonImpl的实现..您是否指Person类 –

+0

此外,您的接口的哪个方法是'person.addPerson(“nath”,“11”,[“.docsDevNmAccessStatus.1”,“字符串“,”4“])'应该打电话? –

+0

@anish所以你可以'addPerson'到'PersonImp'? 'Person.java'发生了什么事?一个'Person'可以有'Person'对象的列表作为'details'?或者只是一个自由格式的列表'?我正在努力处理此代码... –

回答

0

在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"] 
} 

虽然我不知道这对你来说是否够用。