mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> exit;
От Спецификация языка Java, разделите 15.9.5.1:
анонимный класс не может иметь явно заявленного конструктора.
Извините: (
РЕДАКТИРОВАНИЕ: Как альтернатива, можно создать некоторые заключительные локальные переменные и/или включать инициализатор экземпляра в анонимный класс. Например:
public class Test {
public static void main(String[] args) throws Exception {
final int fakeConstructorArg = 10;
Object a = new Object() {
{
System.out.println("arg = " + fakeConstructorArg);
}
};
}
}
Это безобразно, но это могло бы просто помочь Вам. С другой стороны, используйте надлежащий вложенный класс:)
Это не возможно, но можно добавить анонимный инициализатор как это:
final int anInt = ...;
Object a = new Class1()
{
{
System.out.println(anInt);
}
void someNewMethod() {
}
};
не забывают финал относительно объявлений локальных переменных или параметров, используемых анонимным классом, поскольку я сделал это для anInt.
Не имеет никакого смысла иметь именованного перегруженного конструктора в анонимном классе, поскольку не было бы никакого способа назвать его, так или иначе.
В зависимости от то, что Вы на самом деле пытаетесь сделать, просто получив доступ к заключительной локальной переменной, объявленной вне класса, или с помощью инициализатора экземпляра как показано Arne, могло бы быть лучшим решением.
Да, это правильно, что вы не можете определить конструкцию в анонимном классе, но это не означает, что анонимный класс не имеет конструктора. Запутать ... На самом деле вы не можете определить конструкцию в анонимном классе, но компилятор создает для него конструктор с той же подписью, что и вызванный его родительский конструктор. Если у родителя более одного конструктора, у анонима будет один и только один конструктор
Вот еще один способ по поводу проблемы:
public class Test{
public static final void main(String...args){
new Thread(){
private String message = null;
Thread initialise(String message){
this.message = message;
return this;
}
public void run(){
System.out.println(message);
}
}.initialise(args[0]).start();
}
}