All streams
Search
Write a publication
Pull to refresh
23
0
Андрей @akurilov

Программист

Send message

На пункте 39 что-то SLS вспомнилась

Самым разумным для РКН сейчас будет просто перестать существовать. А нашим прекрасным депутатам забыть про свои жалкие потуги придумывать новые запреты, которые не только обернулись мировым позором, но и противоречат Конституции

В джаве тип определяется декларацией, а не использованием.
  • В таком случае весь смысл "var" просто отваливается.


И var иначе работать не имеет права.
  • Непонятно, на основании чего сделан такой вывод. Законы мироздания мешают? В некоторых JVM-based языках вывод типа вполне работает. Что мешало сделать его в яве — непонятно.


Соответственно, данная строчка должна определять тип однозначно и независимо
  • Кому должна?

Object, если это конец области видимости. Если нет, то вы не раскрыли тему

Компилятор мог бы для локальной переменной с "var" самостоятельно выводить минимально необходимый тип, однако он этого не делает. Фича сырая и кастрированная (почему нет "val"?)

Зависит от конкретной ситуации

Причём — очень скромное фи. И только после того, как высказались научные организации. Но «фас» всё-таки прозвучало, скоро с РКН будут снимать шкурку.
Yotube пал. Ребёнок не может посмотреть смешарики. Я готов морду бить депутатам
Я изначально неправильно выразился. «Анемичность» нужна для уменьшения потенциальной связности.
Воспроизвёл. Код:
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 нарушает этот принцип.
На другой машине тот же самый файл /etc/mime.types не привёл к исключению внутри JVM 10, что довольно странно

pastebin.com/6QHQH75H

В конечном итоге всё равно проверяется по расширению. Поэтому проще было не дёргать 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

взято отсюда
stackoverflow.com/questions/48408454/java-9-generating-a-runtime-image-with-jlink-using-3rd-party-jars
ЗЫ: «Провал при попытке определения MIME-типа файла.» это тоже мега проблемой не выглядит и на мой взгляд джуну по силу разобраться в чём дело.
У меня нету столько джунов, чтобы бросить их на решение этих 1000 и 1 мелочей. Самому — лень, естественно. Не барское это дело. Я как-то, когда берусь за задачу, обычно выставляю себе лимит времени.
>И что, вы в рантайме не можете создать user.home/.app.name скопировав туда конфиги из JAR-а? И туда же устанавливать плагины, если у вас настолько простое развёртывание?

Можно, конечно, но это был немного не тот случай. Просто немного печально, что больше нельзя получить путь к файлу с entry point. Требуется переписывание из-за нарушения обратной совместимости, как минимум.

Information

Rating
Does not participate
Location
Санкт-Петербург и область, Россия
Registered
Activity