Самым разумным для РКН сейчас будет просто перестать существовать. А нашим прекрасным депутатам забыть про свои жалкие потуги придумывать новые запреты, которые не только обернулись мировым позором, но и противоречат Конституции
В джаве тип определяется декларацией, а не использованием.
В таком случае весь смысл "var" просто отваливается.
И var иначе работать не имеет права.
Непонятно, на основании чего сделан такой вывод. Законы мироздания мешают? В некоторых JVM-based языках вывод типа вполне работает. Что мешало сделать его в яве — непонятно.
Соответственно, данная строчка должна определять тип однозначно и независимо
Компилятор мог бы для локальной переменной с "var" самостоятельно выводить минимально необходимый тип, однако он этого не делает. Фича сырая и кастрированная (почему нет "val"?)
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.Charset;
public final class Test {
public final static void main(final String args[])
throws Exception {
Files.readAllLines(Paths.get("/etc/mime.types"), Charset.defaultCharset());
}
}
Стэктрэйс:
$ java Test
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at java.nio.file.Files.readAllLines(Files.java:3205)
at Test.main(Test.java:8)
[kurila@ruxxkurilad2c tmp]$ java -version
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-b12)
OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)
В классе sun.nio.cs.CharsetDecoder есть метод decode, в котором есть участок:
if (cr.isUnderflow()) {
if (endOfInput && in.hasRemaining()) {
cr = CoderResult.malformedForLength(in.remaining());
// Fall through to malformed-input case
} else {
return cr;
}
}
Ок, как смогу добраться до машины, где воспроизводится, так и попробую. Однако, насколько я помню из отладчика, файерболл там вылетал из другого места.
Переход на 9 или 10 обещает пока что много боли, так как многие используемые библиотеки собраны под 8-ку и просто не будут работать. Особенно, если вы захотите использовать модули (простого решения проблем с библиотеками пока не наблюдается).
Вроде как так принято — использовать минимально необходимый интерфейс в качестве типа. Для уменьшения потенциальной связности. Local variable type inference нарушает этот принцип.
В конечном итоге всё равно проверяется по расширению. Поэтому проще было не дёргать probeContentType а проверять расширение самому. Но использование кастомного FileTypeDetector — это слишком
а джава как должна узнать какой супер интерфейс из множества делать var'у?
а почему нет? минимально возможный, на основе статического анализа кода. не?
ну и вам очевидно «подсвечивает» не джава а IDE, так что решение этой проблемы на их плечах и в чём тут «джаву» обвинять я не понимаю.
ну если IDE догадывается, то и компилятор тоже вполне мог бы
Ну и в целом какие-то глобальные выводы делаете от обиды, что само сразу работать не стало :)
Не совсем. Я ждал что в 10-ке проблем с модулями уже не будет, но осталось множество вещей, которые делают модули совершенно неюзабельными. Не стало работать ни сразу, ни потом. Для полноты картины — вот, например, удачная цитата:
Wow… this makes jlink from hard to use to useless for the foreseeable future. – pupeno Apr 7 at 9:36
ЗЫ: «Провал при попытке определения MIME-типа файла.» это тоже мега проблемой не выглядит и на мой взгляд джуну по силу разобраться в чём дело.
У меня нету столько джунов, чтобы бросить их на решение этих 1000 и 1 мелочей. Самому — лень, естественно. Не барское это дело. Я как-то, когда берусь за задачу, обычно выставляю себе лимит времени.
>И что, вы в рантайме не можете создать user.home/.app.name скопировав туда конфиги из JAR-а? И туда же устанавливать плагины, если у вас настолько простое развёртывание?
Можно, конечно, но это был немного не тот случай. Просто немного печально, что больше нельзя получить путь к файлу с entry point. Требуется переписывание из-за нарушения обратной совместимости, как минимум.
На пункте 39 что-то SLS вспомнилась
Самым разумным для РКН сейчас будет просто перестать существовать. А нашим прекрасным депутатам забыть про свои жалкие потуги придумывать новые запреты, которые не только обернулись мировым позором, но и противоречат Конституции
"Обвинили западные сервисы"?
Это фиаско
Object, если это конец области видимости. Если нет, то вы не раскрыли тему
Компилятор мог бы для локальной переменной с "var" самостоятельно выводить минимально необходимый тип, однако он этого не делает. Фича сырая и кастрированная (почему нет "val"?)
Зависит от конкретной ситуации
Стэктрэйс:
pastebin.com/6QHQH75H
В конечном итоге всё равно проверяется по расширению. Поэтому проще было не дёргать probeContentType а проверять расширение самому. Но использование кастомного FileTypeDetector — это слишком
а почему нет? минимально возможный, на основе статического анализа кода. не?
ну если IDE догадывается, то и компилятор тоже вполне мог бы
Не совсем. Я ждал что в 10-ке проблем с модулями уже не будет, но осталось множество вещей, которые делают модули совершенно неюзабельными. Не стало работать ни сразу, ни потом. Для полноты картины — вот, например, удачная цитата:
взято отсюда
stackoverflow.com/questions/48408454/java-9-generating-a-runtime-image-with-jlink-using-3rd-party-jars
У меня нету столько джунов, чтобы бросить их на решение этих 1000 и 1 мелочей. Самому — лень, естественно. Не барское это дело. Я как-то, когда берусь за задачу, обычно выставляю себе лимит времени.
Можно, конечно, но это был немного не тот случай. Просто немного печально, что больше нельзя получить путь к файлу с entry point. Требуется переписывание из-за нарушения обратной совместимости, как минимум.