Если вы определяете переменную, она выглядит совершенно корректной для объявления/определения переменной следующим образом:
double[][] output = {{0,0},{1,0}};
Но если вы возвращаете значение, это выглядит недействительным, чтобы написать следующее:
public double[] foo(){
return {0,1,2}
}
Я бы подумал, что внутренне, оба они выполняли бы одно и то же действие. Затмение, по крайней мере, не соглашается. Кто-нибудь знает, в чем разница, и где еще это можно увидеть, или почему было бы полезно принять прежний пример и отвергнуть последнее?
Изменить: хорошо, поэтому это необходимо, когда вы инициализируетесь, но я не вижу никакой двусмысленности... не удалось JVM интерпретировать тип переменной от имени переменной (в случае переопределения уже инициализированные переменные) или при возврате (где JVM может просто посмотреть на возвращаемый тип функции)? Что делает инициализацию частным случаем правила, которое запрещало бы неявный тип? Что заставляет общее правило требовать явный тип?