Анонимный внутренний класс
Говорит, что Вы хотите передать функцию в с String
параметрический усилитель, который возвращается int
.
Первый необходимо определить интерфейс с функцией как ее единственный участник, если Вы не можете снова использовать существующий.
interface StringFunction {
int func(String param);
}
метод А, который берет указатель, просто принял бы StringFunction
экземпляр как так: [как 1111]
public void takingMethod(StringFunction sf) {
int i = sf.func("my string");
// do whatever ...
}
И назвали бы так:
ref.takingMethod(new StringFunction() {
public int func(String param) {
// body
}
});
РЕДАКТИРОВАНИЕ: В Java 8, Вы могли назвать его с лямбда-выражением:
ref.takingMethod(param -> bodyExpression);
Согласно Стивенсу Расширенное программирование в среде UNIX , глава 13, это процедура создания хорошо работающего демона Unix:
setsid
для создания нового сеанса. Это делает три вещи:
/
, чтобы не мешать монтированию и размонтированию stdout
, stderr
, и stdin
. В настоящее время существует файл для отслеживания PID, который активно используется сценариями загрузки дистрибутива Linux. Обязательно запишите PID внука, либо возвращаемое значение второй вилки (шаг 3), либо значение getpid ()
после шага 3.
Вот реализация Ruby, в основном переведено из книги, но с двойной вилкой и записью PID демона.
# Example double-forking Unix daemon initializer.
raise 'Must run as root' if Process.euid != 0
raise 'First fork failed' if (pid = fork) == -1
exit unless pid.nil?
Process.setsid
raise 'Second fork failed' if (pid = fork) == -1
exit unless pid.nil?
puts "Daemon pid: #{Process.pid}" # Or save it somewhere, etc.
Dir.chdir '/'
File.umask 0000
STDIN.reopen '/dev/null'
STDOUT.reopen '/dev/null', 'a'
STDERR.reopen STDOUT