Если ничто иное, можно сделать грязный взлом при помощи крон (планировщик задач Linux) для выдачи той команды периодически. Это не точно идеально все же.
Это называется инициализация двойной фигурной скобки . (РЕДАКТИРОВАТЬ: ссылка удалена, заархивировано здесь )
Это означает, что вы создаете анонимный подкласс, а код в двойных фигурных скобках в основном является конструктором. Его часто используют для добавления содержимого в коллекции, потому что синтаксис Java для создания того, что по сути является константами коллекции, несколько неудобен.
Так что вы можете сделать:
List<String> list = new ArrayList<String>() {{
add("one");
add("two");
add("three");
}};
вместо:
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
На самом деле мне это не нравится и я предпочитаю это делать this:
List<String> list = Arrays.asList("one", "two", "three");
В этом случае это не имеет особого смысла, тогда как, скажем, для Карт, у которых нет удобного помощника.
«Внешние» фигурные скобки означают, что вы создаете анонимный подкласс, вторые фигурные скобки являются инициализатором объекта. Инициализатор запускается перед конструктором класса, но после любых вызовов super
(и, следовательно, также после любых инициализаторов суперкласса). Вы также можете использовать инициализаторы в неанонимных классах, что является удобным способом инициировать поля final
, если у вас есть несколько конструкторов, которые не могут вызывать друг друга, или поля, требующие более сложной инициализации, чем позволяют обычные инициализаторы полей. .
Рассмотрим этот класс:
class X extends Y{
private final int lulz;
private static boolean someCondition(){...}
private static boolean danger() throws SomeException { ... }
public X(A a) throws SomeException {
super(a);
lulz = someCondition()? danger() : 0;
}
public X(B b) throws SomeException {
super(b);
lulz = someCondition()? danger() : 0;
}
}
Его можно переписать как:
class X extends Y{
private final int lulz;
private static boolean someCondition(){...}
private static boolean danger() throws SomeException { ... }
{ // initalizer -- might throw SomeException!
lulz = someCondition()? danger() : 0;
}
public X(A a) throws SomeException { super(a); }
public X(B b) throws SomeException { super(b); }
}
Если инициализатор может генерировать проверенное исключение, все конструкторы должны объявить, что они могут его генерировать.
Вы создаете анонимный класс и используете класс Instance initialize r идиому, например:
class X {
private Y var1;
private X() {
Z context = new Z(
new SystemThreadPool()) {
{ // This is the initialize idiom
var1 = new Y(); //
} //
}
); // BTW you are missing ")"
}
}