Java: Почему я не могу привести это к объекту? - PullRequest
2 голосов
/ 16 июля 2009

Это странно ... Я думал, что каждый объект в Java имел Объект в качестве предка.

У меня есть ClassA, который расширяет мой ClassB и реализует Runnable.

После создания ClassA я не могу привести его к Object.

Предположим, getClassA возвращает экземпляр ClassA.

Я делаю

Object obj = getClassA();

Я тоже пытался

Object obj = (Object) getClassA();

Я получаю ошибку компиляции несовместимых типов: найден класс, требуется объект.

Что за дело с этим? Я думал, что все объекты можно привести к объекту.

Редактировать: Я предполагаю, что это как-то связано с тем, что ClassA реализует Runnable, но я не уверен и нуждаюсь в объяснении.

Edit2: изменение getClassA () для возврата объекта позволяет программе компилироваться.

Edit3: импорт пакета, содержащего ClassB, устранил проблему. Класс B был определен в другой банке. ClassA был определен в другой банке, которая ссылалась на банку, содержащую ClassB.

Ответы [ 4 ]

5 голосов
/ 16 июля 2009

У вас случайно есть класс с именем Object в вашем коде (или нестандартные пакеты, которые он импортирует)?

2 голосов
/ 16 июля 2009

Как вы компилируете файл Java. Можете ли вы дать больше информации о getClassA (). Какой тип возврата у этого метода?

Приведение типов не требуется, поскольку все объекты в Java имеют тип Object.

Если вы используете IDE, например, eclipse, вы можете поставить точку останова на строке, где вы назначаете объект obj = getClassA (); и проверьте значение, возвращаемое getClassA ().

В противном случае вы можете попытаться задать условие instanceof перед присвоением значения obj.

if(getClassA() instanceof Object){
    Object obj = getClassA();
}else{
    System.out.println("getClassA() is not retuning an object: "+ getClassA());
}
1 голос
/ 16 июля 2009

Класс спускается с объекта. Здесь что-то еще происходит.

Если вы действительно код:

//...Code
Object obj = MyObject.getClassA();
//More Code...

class MyObject{
  static Class getClassA(){...}
}

Это должно работать. Покажите нам код для фактического ответа.

0 голосов
/ 16 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...