[英]groovy closure for complex object prblm stateme2
我有一個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
接口無法更改。
我怎樣才能寫像
addPerson "anihs" "nath" //call to person.addPerson("anish","nath")
addPerson "tim" "kates"
//simlary of other interface method any suggestion
在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"]
}
盡管我不確定這對您來說是否足夠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.