Преобразование нестатического списка в статический список - PullRequest
4 голосов
/ 18 июля 2011

Мне задали этот вопрос в интервью, и я не могу найти решение:

Я объявил список в своем классе. Во время его объявления я не сделал это статичным. Но после добавления некоторых данных, я хочу сделать это статичный. Возможно ли это?

Нам разрешено изменять тип данных списка.

Редактировать : Разве невозможно объявить массив статического типа, а затем преобразовать список в массив и, следовательно, сделать его статическим?

Ответы [ 4 ]

4 голосов
/ 18 июля 2011

Не используется стандартная Java, но вы на самом деле можете манипулировать исполняемым байтовым кодом, используя такую ​​библиотеку, как Javassist ; технически ответ «да», но вы можете быть застрелены лидером команды, если вы действительно сделаете это.

3 голосов
/ 18 июля 2011

Нет.Декларация находится во время компиляции.Добавление некоторых данных происходит во время выполнения.Вы не можете изменить объявление во время выполнения - поэтому ответ - нет.

... но зачем вам делать что-то подобное?

0 голосов
/ 18 июля 2011

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

Но теперь я буду размышлять. Поскольку основная причина сделать его статичным - иметь одну копию списка для каждого класса и иметь возможность доступа к нему через класс, а не через экземпляр, во время выполнения вы можете назначить этот список некоторой статической переменной, и тогда он будет доступно таким образом. Конечно, если у вас есть несколько экземпляров класса с разными копиями списка, это становится логически невозможным без какого-либо слияния. Опять же, я могу просто размышлять о том, что вы хотели интервьюер.

0 голосов
/ 18 июля 2011

Вы не можете изменить объявление в runTime.

Когда вы пишете код, вам нужно скомпилировать ваш код (включая объявление) в байт-код или в собственный двоичный код.

В противном случае для этих функций вызов статической функции, но нет статического объявления, вы получите ошибку во время компиляции.

...