2012-01-08 2 views
1

im пытается сделать некоторое отражение на апплет. вещей я нашел некоторые массивы INTS, строки, объекты и т.д.Отражение Java, какой класс имеет объект?

, например, если есть поле с объектом [] и объект [0] .ToString() = [I @ 7593c366 тогда я знаю его целочисленный массив. но что, если он говорит, что aa @ 98324ca33 это класс, то аа? im, использующий загрузчик классов, поэтому, прежде всего, я вижу, что мне нужно загрузить класс aa (часть перед @ и использовать в нем объект, но im не уверен, что часть befor @ является классом. мне это прямо или есть другие идеи

Thnx

+1

Почему вы не просто использовать объект '[0] .getClass()'? Кроме того, зачем вам нужно снова загружать класс? И вы знаете, что класс обычно не содержит _ объектов, не так ли? Таким образом, использование объекта в нем не совсем точно. – Thomas

ответ

5

Вы не должны использовать toString() для этого - с одной стороны, оно может быть отменено, как простой пример:?!

Object x = "[email protected]"; 
String bogusClassName = x.toString(); 
.

Вы явно ошибаетесь, думая, что x относится к объекту типа aa здесь - это относится к строке.

Вы можете узнать класс любого объекта, просто вызывая getClass() на нем:

Object x = new SomeType(); 
Class<?> clazz = x.getClass(); 

Это не совсем понятно, что вы пытаетесь сделать, или там, где вы получаете информацию в первую очередь , но вы определенно не должны использовать toString для определения соответствующего класса.

2

Да, часть before @ является классом fqn, но вы не должны полагаться на это. Объект может переопределить toString(), а затем ваша логика потерпит неудачу.

Используйте вместо этого obj.getClass().

2

Посмотрите на класс java.lang.Class. Просто позвоните getClass на объект, чтобы получить его класс, вместо того, чтобы использовать toString метод

Object anObject = ... ; 
Class<?> clazz = anObject.getClass(); 

Если вы хотите проверить, является ли это массив, который можно использовать для Class#isArray() метода

clazz.isArray() 

Другой путь вокруг тоже возможно. Если у вас есть Class экземпляр, вы можете определить, принадлежит ли объект к данному классу с помощью метода Class#isInstance(Object)

clazz.isInstance(anObject); 
Смежные вопросы