2013-08-26 6 views
3

Как сравнить имя объекта со строкой в ​​Java?Сравнение имени объекта (имя ссылки) со строкой

Например:

class_name obj = new class_name(); 

и я хочу, чтобы сравнить имя объекта obj со строкой. Каков правильный способ сделать это?

+3

Это абсолютно невозможно. Какую проблему ты пытаешься решить? – SLaks

+2

Пожалуйста, не используйте символы подчеркивания в именах классов. Конвенция о присвоении имен Java: «Имена классов должны быть существительными в смешанном случае с первой буквой каждого слова с заглавной буквы.'Придерживаясь этого, другие разработчики не видят при чтении вашего кода. – Kaadzia

+0

@Ask_it вы проверили мой ответ .. ?? – Dileep

ответ

8

Это не может быть сделано непосредственно на Java. Переменные имена являются просто удобством для программиста и даже не отслеживаются после компиляции вашего кода. Вместо этого вы можете использовать Map, который отображает строковые идентификаторы в соответствующие им объекты. Или же вы можете добавить name поля в класс, который содержит строку ("obj" в вашем примере):

ClassName obj = new ClassName("obj"); 

if (obj.getName().equals(...)) 
    ... 

(Обратите внимание, что я предполагал более стандартное соглашение об именовании.)

0

== сравнивают ссылки на объекты , Он выясняет, указывают ли два операнда на один и тот же объект.

Если вы хотите проверить, содержат ли две строки одинаковые символы, вам нужно сравнить строки, используя equals.

Что касается конкретной проблемы, это невозможно.

0

Вы можете получить имя класса класса, вызвав obj.getClass(). Вы не можете получить имя переменной объекта с помощью обычных средств.

+0

или любыми другими средствами, поскольку информация отсутствует в байте-коде. – eis

+0

кто-то уже разместил какое-то обходное решение в этой самой теме, так что да ... – redFIVE

0

Вы можете проверить тип объекта, используя ключевое слово instanceof

Посмотрите этот пример для более подробной информации

public void checkType(Object param) { 
    if(param instanceof String) { 
    System.out.println("param is a String"); 
    } 
    else if(param instanceof Integer) { 
    System.out.println("param is an Integer"); 
    } 
} 

Я считаю, что это правильный способ сделать это .. !!

Вы можете посмотреть here для получения более подробной информации

0

Если вы хотите получить доступ к локальным переменным и если исходный код скомпилирован с опцией javac -g сохранить отладочную информацию, Bytecode Library like ASM может быть использован для получения этой детали. См 4.3. Debug

Классы скомпилированные с JAVAC -g содержат имя их исходного файла, отображение между номерами строки и инструкции байт-кода, а также отображение betwen имен локальных переменных в исходном коде и локальной переменной слоты в байтекоде. Эта дополнительная информация используется в отладчиков и трассировки стека исключений, когда он доступен

Если вы хотите получить имя переменных уровня/поля класса можно использовать java reflection API.

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