2015-11-04 3 views
3

Для меня это было совершенно ясно, что ответ на этот вопрос НЕТ, но только сегодня я пришел к линииМожно ли вызвать нестатический метод без создания экземпляра?

Context.setCredentials(userId, pwd.toCharArray()); 

где SetCredentials является не-статический метод. Intellij IDEA подчеркивает это как ошибку, поэтому мой проект не компилировался, однако, в Eclipse все строит отлично, как это может быть?

Это не проблема, чтобы исправить эту проблему, но я хотел бы понять, почему это может произойти. Постскриптум Я мог бы предположить, что это может быть очень специфичным для проекта.

UPDATE

Перед SetCredentials называется есть другой вызов происходит:

Context.initContext() 

где-то мы вызываем следующий метод:

synchronized private static void initContext(String connectionString) { 
    if (_this == null) { 
     _this = new Context(connectionString); 
    } 
} 

где this определяется как это в тот же класс контекста:

private static Context _this; 

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

+2

Отправьте код для объекта 'Context' –

+6

Нет, это невозможно. Очистите проект Eclipse, возможно, он запутался. – Tunaki

+0

Действительно. Даже создание пользователя String; if (user == "") приведет к ошибке. Переменные должны быть инициированы. – MiKE

ответ

0

Хорошо, ответ чистый NO, но теперь я попытаюсь объяснить, почему так получилось. На самом деле здесь ничего не нужно делать о Java, это больше о IDE, но больше о Настройки проекта.

Проект был первоначально разработан в Eclipse, однако, во время моей попытки построить его в IntelliJ IDEA я не включал настройки проекта Eclipse,, таким образом, IDEA признали его в качестве источников и попытался скомпилировать. Вот почему он жаловался.

Итак, дело в том, что в Eclipse, папка с этим классом была включен в источниках, однако, все файлы были исключены в то же время. Таким образом, компилятор не включал этот файл, и Eclipse не обнаружил ошибку. Я хотел бы заметить, что, поскольку у меня не было большого опыта работы с Eclipse, это было очень трудно найти его плюс я не узнал следующее различие между значками исходных файлов:

enter image description here

Однако, в IntelliJ IDEA он может быть признан немного быстрее, я думаю:

enter image description here

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

-1

Это явно ошибка IDE.

Попробуйте очистить сборку, убедитесь, что у вас нет других ошибок.

Вы должны стараться не слепо ослепляться сообщениями компилятора, ошибки действительно распространены как в eclipse, так и в Android Studio, даже иногда Xcode сумасшедший.

Надеюсь, это поможет.

+0

Эй, если вы, по крайней мере, оставите комментарий, объяснив, почему, нет способа стать лучше, если я не знаю, где я терпит неудачу. – Nanoc

+0

Я не проголосовавший, но ваш ответ не дает решения. ОП уже заявила, что он пробовал очистить и восстановить проект. Кроме того, вы указываете: «Это явно ошибка IDE». но вы не даете объяснений тому, что делает его так «явно» ошибкой IDE. Я лично не думаю, что все это ясно. В любом случае, это, безусловно, не отвечает на вопрос. –

+0

Не уверен, что у этого вопроса есть реальный ответ, я только что попытался изложить некоторые из моих знаний. – Nanoc

0

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

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

Смежные вопросы