Я заметил что-то в статических инициализаторах, что может быть ошибкой в javac. Я создал сценарий, в котором я могу присвоить переменной значение, но не читать это значение обратно.
Ниже приведены два примера, первый компилируется нормально, второй выдает ошибку при попытке прочитать значение из tmp, но по какой-то причине разрешено присвоение значения tmp. Я мог бы понять, если бы он не мог ни читать, ни писать в переменную, поскольку tmp объявляется после статического инициализатора, но ошибка только в одном из них не имеет для меня смысла.
//Compiles Successfully:
public class Script
{
public static Object tmp;
static
{
tmp = new Object();
System.out.println(tmp);
}
}
//error only on the read but not the assignment
public class Script
{
static
{
tmp = new Object();
System.out.println(tmp);
}
public static Object tmp;
}
чтобы еще больше подчеркнуть это, это успешно компилируется.
public class Script
{
static
{
tmp = new Object();
}
public static Object tmp;
}