簡體   English   中英

復雜對象prblm stateme2的常規閉包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM