Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
ArrayList<int>
ArrayList<Integer>
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(42); // Тут произойдет автоматический боксинг
int number = list.get(0); // а тут анбоксинг
List<int> list = new List<int>();
list.Add(42); // никакого боксинга
int number = list[0]; // никакого анбоксинга
Марк задаёт вопрос: а какие вообще были варианты у ребят из Oracle?
Я в целом про то, что синтаксис Java не улучшается годами.
То, что в других языках есть из коробки, здесь реализуется через паттерны.
static void lambda$1(...) { }, а при выполнении при помощи некторой «магии» берётся ссылка на этот метод и превращается в экземпляр интерфейса (нечто вроде dynamic proxy).void DoSomething()
{
Console.Write("Hello ");
Task.Factory.StartNew(PrintWorldWithDelay);
// тут много кода
Console.ReadLine();
}
// и тут много
void PrintWorldWithDelay()
{
Thread.Sleep(2000);
Console.Write("World! (after 2 sec)");
}
void DoSomething()
{
Console.Write("Hello ");
Task.Factory.StartNew(() =>
{
Thread.Sleep(2000);
Console.Write("World! (after 2 sec)");
});
// много кода
Console.ReadLine();
}
new Thread(new Runnable() { public void run() {
Thread.sleep(2000);
System.out.println("World! (after 2 sec)");
}}).start();new Thread(
public void run() {
Thread.sleep(2000);
System.out.println("World! (after 2 sec)");
}).start();new Runnable() { public void run() { плюс ещё одна закрывающая скобка. И по многим правилам оформления обычно это разбивают на минимум 2 строки.int[] result = new int[1];
callSomething(() => { ...; result[0] = x });
А без трюков — будет много сложностей, как у людей, так и у компилятора и JVM, поверьте....
Foo foo = null;
try{
foo = getFromSomewhere();
} catch (IDontCareException e) {
log.info(e, "looks like foo is not there);
}
if (foo != null) {
doSomethingWithFoo(foo);
}
doSomethingElse();
...
Релиз Java 8 передвинут на март 2014 года