A1 Да, это возможно, но требует, чтобы вы печатали все больше и больше.
Хотя это, безусловно, не является чем-то принципиально неправильным, это одна из причин, по которой разработчик больше жалуется. Они (а иногда и я сами) чувствуют, что Java слишком многословна .
По мере того, как аппаратное обеспечение становилось все быстрее, новые языки программирования, которые вначале были слишком дороги для выполнения вычислений, стали возможными, и теперь они используются все больше и больше и очень популярны. Когда разработчикам приходится снова печатать на Java, они чувствуют, что-то вроде о нет: , public static void main
снова! .
Одна из вещей, которая была необходима Java (и статически типизированным языкам в целом) для увеличения скорости выполнения, - это выполнение максимально возможного количества проверок до запуска (то есть на этапе компиляции)
Эти новые языки программирования (особенно Python и Ruby) доставляют удовольствие от программирования, потому что вам нужно меньше печатать, чтобы достичь того же.
Реакция Java на это заключается в том, чтобы сделать язык больше и включить в него часть этого "синтаксического сахара", вот почему.
Даже языки программирования, такие как C #, имели эти расширенные функции (мне приходят в голову свойства), чтобы сделать код разработчика меньше.
В конце я думаю, что эти дополнения приносят пользу языку, но их нужно добавлять очень осторожно, чтобы не нарушить совместимость и / или не создать настолько большой язык, чтобы никто не мог его использовать.
Я думаю, что альтернативой было бы сделать методы более выразительными в своих именах, но это очень сложно для Java. Возможно на новом языке :).
Подпись метода Map put могла выглядеть так:
/**
* Analog to put( Object k, Object v );
*/
public [( Object = k )]=( Object v ) {
}
Это позволяет имени метода быть: [(key)]=(value)
и, в конце концов, пропустить круглые скобки (как в Ruby или первоначально в Smalltalk), так что этот метод будет:
Map map = ....
map.["name"]="Oscar";
Поскольку это невозможно (потому что []=
не являются допустимыми идентификаторами методов) и запись:
map.put("name","Oscar");
Это ... ммхх слишком многословно, они решили добавить это решение.
Еще одним улучшением являются числовые литералы, поэтому вы сможете ввести:
int million = 1_000_000;
A2 : Вы получите что-то еще.
A3 (расширение моего комментария к kloffy answer).
Вы можете написать тот же код на Java на сегодняшний день.
Предоставлено Stage, Scente, Group, Text, ImageView, Image
существующие классы Java, вы можете набрать:
new Stage() {{
title = "Group-Nodes-Transformation";
scene = new Scene() {{
width = 600;
height = 600;
content = new Group() {{
content = new Object[] = {
new Circle() {{
centerX = 300;
centerY = 300;
radius = 250;
fill = Color.WHITE;
stroke = Color.BLACK;
}},
new Text() {{
x = 300;
y = 300;
content = "Mr. Duke";
}},
new ImageView() {{
image = new Image() {{
url = "D:\\TEST\\Documents\\duke.png"
width = 50;
height = 50;
}};
}};
};
}};
}};
}};