Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / groovy и именованное обращение к параметрам метода / 3 сообщений из 3, страница 1 из 1
31.08.2015, 10:20
    #39039570
Мурзик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
groovy и именованное обращение к параметрам метода
Добрый день, уважаемые Дамы и господа.

Почитавши доку по groovy, увидел инфу про именованное обращение к параметрам метода (вместо позиционного по традиции).
Решил проверить -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
class ClassWork01 {

    Integer methodOne(String parOne) {
        println "ClassWork"
    }
}
ClassWork01 clsTest = new ClassWork01()
clsTest.methodOne parOne: 01


Версия groov:
Groovy Version: 2.4.4 JVM: 1.7.0_17 Vendor: Oracle Corporation OS: Windows 7

При выполнении (groovy ClassWork01)
вижу такое сообщение -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Caught: groovy.lang.MissingMethodException: No signature of method: ClassWork01.methodOne() is applicable for argument t
ypes: (java.util.LinkedHashMap) values: [[parOne:1]]
Possible solutions: methodOne(java.lang.String)
groovy.lang.MissingMethodException: No signature of method: ClassWork01.methodOne() is applicable for argument types: (j
ava.util.LinkedHashMap) values: [[parOne:1]]
Possible solutions: methodOne(java.lang.String)
        at ClassSampleForForum.run(ClassSampleForForum.groovy:8)


То есть он (groovy) понимает такой код - parOne: 01
как обращение к коллекции.

Подскажите пожалуйста, есть ли возможность (при помощи аннотации, каких-нибудь других волшебных приемов) заставить groovy отнестись к этому коду именно как к именованным параметрам?


Заранее спасибо.
...
Рейтинг: 0 / 0
31.08.2015, 15:49
    #39039806
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
groovy и именованное обращение к параметрам метода
А ты просто его попробуй вызвать. Может там пустяк какой. Область видимости там не public к примеру.
...
Рейтинг: 0 / 0
01.09.2015, 10:25
    #39040253
Мурзик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
groovy и именованное обращение к параметрам метода
mayton, добрый день.
Просто вызывается -
clsTest.methodOne "01"

А так - не работает
clsTest.methodOne parOne: "01"


:)

Я сделал декомпиляцию подобному классу и понял, что это именованное обращение к параметрам работает только для неявных конструкторов -

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class Book01 {
    String title = "testTitle"
    String author = "TestAuthor"
    Integer pages = 0
/*    Book01(String pTitle) {
        this.title = pTitle
    }*/
}
Book01 book1 = new Book01(title: "title01", author: "author01", pages: 1)
Book01 book2 = new Book01(pages: 2, author: "author02",
        title: "title02")
Book01 book3 = new Book01(title: "title03") // работает
Book01 book4 = new Book01()
//Book01 bookN = new Book01(pTitle: "New") Не работает
println book4.pages

Декомпиляция (через связку groovyc -> javap):
Compiled from "Book.groovy"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Book extends groovy.lang.Script {
  public static transient boolean __$stMC;
  public Book();
  public Book(groovy.lang.Binding);
  public static void main(java.lang.String...);
  public java.lang.Object run();
  protected groovy.lang.MetaClass $getStaticMetaClass();
}



То есть groovy неявно создает конструктор с параметром типа Binding и скорее всего через какой-нибудь метод getVariable обращается к параметрам по имени.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / groovy и именованное обращение к параметрам метода / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]