Ошибка в компиляторе затмения или javac?

Один метод - условное агрегирование:

select max(case when seqnum = 1 then CheckBoxList end) as checkbox_0,
       max(case when seqnum = 2 then CheckBoxList end) as checkbox_1,
       max(case when seqnum = 3 then CheckBoxList end) as checkbox_2,
       max(case when seqnum = 4 then CheckBoxList end) as checkbox_3       
from (select t.*,
             row_number() over (order by id) as seqnum
      from t
     ) t;

Обратите внимание, что при этом будут возвращены четыре столбца независимо от числа в таблице. Если вам нужно столько столбцов, сколько строк. , , тогда вам нужен динамический SQL. Я мог бы предостеречь вас от этого и использовать вместо этого агрегирование строк.

7
задан Michael Myers 16 April 2009 в 19:26
поделиться

3 ответа

Соответствующие части Спецификации языка Java должны быть:

§8.1.4 : [...] ClassType должен назвать доступный (§6.6) тип класса, иначе произойдет ошибка времени компиляции.

§6.6.1: [...] Элемент (класс, интерфейс, поле или метод) ссылочного типа (класс, интерфейс или массив) или конструктор типа класса доступен только в том случае, если тип доступен, а элемент или конструктор объявлен для разрешения доступа:

  • Если элемент или конструктор объявлен открытым, доступ разрешается. Все члены интерфейсов неявно общедоступны. [...]
    • В противном случае, если член или конструктор объявлен как закрытый, тогда доступ разрешается тогда и только тогда, когда он происходит в теле класса верхнего уровня (§7.6), который включает в себя объявление члена или конструктора.

Так как ClassType не находится в теле класса, B.Secret недоступен в этом месте, поэтому A недоступен, поэтому должна произойти ошибка времени компиляции.

7
ответ дан 6 December 2019 в 12:54
поделиться

Затмение не так. Если вы рекламируете что-то как

extends A<X>

, вам нужно знать об A и X.

6
ответ дан 6 December 2019 в 12:54
поделиться

Я склонен думать, что Джавак прав. Чтобы создать новый класс

A<B.Secret>

, универсальный должен иметь доступ к классу, который он использует. Тот факт, что B затем расширяет этот класс, незначителен.

3
ответ дан 6 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: