Что такое Perl-эквивалент этого фрагмента Java? (Объяснение Java в терминах Perl) - PullRequest
3 голосов
/ 17 июня 2011

Может ли кто-нибудь помочь мне "перевести" этот фрагмент кода Java в термины Perl / Moose ?.Попытка понять Java-объектный синтаксис / логику, и я знаю только perl.

РЕДАКТИРОВАТЬ на основе комментариев: Фрагмент идет из пакета xwiki - http://platform.xwiki.org/xwiki/bin/view/DevGuide/WritingComponents... Это слишком большой для анализа, так что насчетоставшийся код?Возможно (только для объяснения - игнорировать @lines? Каково общее значение слова "@something"?

@Component("hello")
public class HelloWorldScriptService implements ScriptService
{
    @Requirement
    private HelloWorld helloWorld;

    public String greet()
    {
        return this.helloWorld.sayHello();
    }
}

Ищете что-то вроде следующего фрагмента Perl, но понятия не имеете о "@"Компонент, @Requirement и т. Д .: (

package HelloWorldScriptService;
use Moose;
sub greet {
    return $self->
}

Существует несколько документов, в которых java объясняется с помощью терминов perl-ish? (По крайней мере, некоторые основы)

Ответы [ 2 ]

5 голосов
/ 17 июня 2011

не уверен насчет @Component, но вот еще немного:

package HelloWorld;
use Moose;

sub say_hello {
   print "Hello";
}

1;

package HelloWorldScriptService;
use Moose;

has 'hello_world' => ( is => 'rw', isa => 'HelloWorld' );

# TODO - will need to instantiate the hello_world object somewhere...

sub greet {
   my ($self) = @_;
   return $self->hello_world->say_hello();
}

1;

, поскольку helloWorld является приватным атрибутом в оригинале, вы можете добавить к имени «hello_world» знак подчеркивания (и добавить init_args => undef) - это не обеспечивает конфиденциальности, как Java, но показывает всем, кто смотрит на код, который является концептуально закрытым (и запрещает установку в new ())

3 голосов
/ 17 июня 2011

Эти аннотации являются метаданными для некоторой Инъекции зависимостей (похоже, что XWiki использует собственную поддержку внедрения зависимостей, и эти аннотации используются ею).

Когда используется этот класссами по себе они не имеют никакого особого значения.Но когда он используется внутри контейнера DI, @Requirement указывает, что контейнером должно быть введено значение helloWorld, а @Component указывает, что сам класс может быть внедрен в другие компоненты.

...