Интерфейс сопоставления с образцом для Java 8 с предупреждением компилятора - PullRequest
0 голосов
/ 27 февраля 2019

Я создаю инструмент командной строки, который должен проверить некоторую логику, и если это не удастся, он должен распечатать ошибку и выйти, часть этой логики может вызвать исключение во время выполнения.Я использую ниже интерфейс Java BiConsumer.

BiConsumer<Consumer<T>,String> tryOrDie = 
    (block,msg)->
    {
        try
        {
            block.accept((T) this);
        }
        catch (Throwable t)
        {
            log.error(t.getMessage(), t);
            log.error(msg);
            System.exit(-1);
        }
    };

Так, например, если мой блок получит другие процессы, выполняющие этот инструмент.Это можно вызвать так, чтобы получить другие процессы Java UNIX с именем этой программы (MyProgram)

final String currentPid=ManagementFactory.getRuntimeMXBean().getName();
currentPid=currentPid.substring(0,currentPid.indexOf("@"));    
String GET_ALERT_PID="ps -ef | grep MyProgram | grep -v grep | tr -s ' ' | cut -d ' ' -f 2";
    tryOrDie.accept(y->{
                    otherPids = new BufferedReader(new InputStreamReader(Wrap.startProcess(GET_ALERT_PID))).lines().map(String::trim)
                            .filter(pid -> !pid.equalsIgnoreCase(currentPid))
                            .collect(Collectors.toList());
                }, "Could not determine if other running processIds of MyProgram were running");

Код работает, как и ожидалось, однако я все еще получаю предупреждение компилятора Тип безопасности: Не проверено приведение из MyProgram к T в строке

block.accept((T) this);

Может ли это вызвать утечку памяти или другую проблему?Есть ли помощь для удаления этого типа безопасности в компиляторе?Это было бы полезно.

...