LINUX.ORG.RU
ФорумTalks

[ЖЖ] [вещества] Dependency injection

 ,


0

0

Пишу тут на Жабе новое API с использованием Guice, и закралась мысль: а почему бы не сделать это на уровне языка?

Что-нибудь типа:

public class Foo expects List<String>, Calendar {
    public void bar() {
        List<String> list = inject List<String>();
        
        for(int i = 0; i < 5; i++) {
            Calendar cal = inject Calendar();
            cal.add(Calendar.MONTH, -5);
            list.add("Date " + i + " months ago: " + cal);
        }
        
        ...
    }
}

public injector MyInjector {
    List<String> = ArrayList<String>,
    Calendar = GregorianCalendar,
    ...
    @Singleton AbstractFooService = DefaultFooService
}

public static void main(String[] args) {
    CoreObject obj = new(MyInjector, OtherInjector) CoreObject();
    Foo foo = obj.getBar().getFoo();
    ...
}

В чём плюсы:
- Большинство аннотаций заменится конструкциями языка; можно оставить аннотации для поведения "не по умолчанию"
- Отпадёт необходимость в извращениях с синтаксисом, типа (пример реальный)

binder.bind(new TypeLiteral<Map<String, Integer>>() {}).to(new TypeLiteral<HashMap<String, Integer>>() {});

- Многое можно будет проверить на этапе компиляции
★★★

я два раза два раза не повторяюсь

z0D5e8n7x
()

> Пишу тут на Жабе новое API с использованием Guice, и закралась мысль: а почему бы не сделать это на уровне языка?

Если каждую удачную конструкцию тянуть в язык, язык станет невероятно перегруженным. Есть даже пример языка, в который тянут всё подряд: сишарп.

Поэтому самой мудрой мыслью при столкновении с многословностью жабы должна стать: "а может стоило писать на более гибком языке?"

gaa ★★
()
Ответ на: комментарий от gaa

> Есть даже пример языка, в который тянут всё подряд: сишарп.

Есть даже более удачный: C++.

*уворачивается от камней*

Sikon ★★★
() автор топика
Ответ на: комментарий от Sikon

>> Есть даже пример языка, в который тянут всё подряд: сишарп.

> Есть даже более удачный: C++.

Если считать в количестве притянутых конструкций на год жизни языка, то всё же у сишарпа поболее :)

gaa ★★
()

Может я тормоз или недостаточно знаю Java, но объясните пожалуйста, что Вы этим кодом хотели сказать? В чем суть предлагаемой Вами конструкции?

Sectoid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.