Отражение Java, какой класс у объекта? - PullRequest
1 голос
/ 08 января 2012

я пытаюсь сделать некоторые размышления о апплете. я нашел несколько массивов целых, строк, объектов и т. д.

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

Thnx!

Ответы [ 3 ]

5 голосов
/ 08 января 2012

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

Object x = "aa@98324ca33";
String bogusClassName = x.toString();

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

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

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

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

2 голосов
/ 08 января 2012

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

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

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

clazz.isArray()

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

clazz.isInstance( anObject );
2 голосов
/ 08 января 2012

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

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

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