Разверните Абстрактный Java-класс для всех экземпляров - PullRequest
1 голос
/ 15 июня 2011

Я работаю над приложением Grails.Мне нужно свойство абстрактного Java-класса (org.quartz.Trigger), добавляющее

Trigger.metaClass.id = { delegate.hashCode() }

, прежде чем я вызову класс работ.Я хотел бы включить это для всех моих триггеров в моем приложении.Это возможно?Или я должен повторять это каждый раз, когда мне нужна собственность?

1 Ответ

2 голосов
/ 15 июня 2011

Если вы добавите к metaClass до того, как будут созданы какие-либо объекты Trigger, тогда это добавление будет существовать во всех них.

Однако после их создания вам нужно будет добавить его вкаждый экземпляр Trigger.

Конечно, этот метод будет виден только из Groovy, поскольку Java не знает о metaClass.

Некоторые примеры кода Groovy, показывающие это в действии:

// Add to the metaClass of an anstract java class
AbstractList.metaClass.woo = { 'hi there' }

// Create an instance of a class that extends this abstract class
ArrayList list = [ 1, 2, 3 ]

// Call the closure in the metaClass
println list.woo()
...