Я создаю инструмент командной строки, который должен проверить некоторую логику, и если это не удастся, он должен распечатать ошибку и выйти, часть этой логики может вызвать исключение во время выполнения.Я использую ниже интерфейс 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);
Может ли это вызвать утечку памяти или другую проблему?Есть ли помощь для удаления этого типа безопасности в компиляторе?Это было бы полезно.