Вопрос по class, java, object – Как определить типы объектов в Java [дубликат]

19

Possible Duplicate:
How to determine an object's class (in Java)?
Java determine which class an object is

У меня есть следующий пример неполного метода для сравнения типа объекта данного объекта

<code>public void test(Object value) {

        if (value.getClass() == Integer) {
            System.out.println("This is an Integer");
        }else if(value.getClass() == String){
            System.out.println("This is a String");
        }else if(value.getClass() == Float){
            System.out.println("This is a Fload");
        }

}
</code>

мы можем назвать этот метод как

<code>test("Test");
test(12);
test(10.5f);
</code>

этот метод на самом деле не работает, пожалуйста, помогите мне заставить его работать

использованиеinstanceof оператор.If (value instanceof Integer){ Dandy
Мой самый любимый тип вопроса. Ожидается 45 ответов в течение 30 секунд. Piotr Kochański

Ваш Ответ

4   ответа
36

.class:

if (value.getClass() == Integer.class) {
    System.out.println("This is an Integer");
} 
else if (value.getClass() == String.class) {
    System.out.println("This is a String");
}
else if (value.getClass() == Float.class) {
    System.out.println("This is a Float");
}

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

Также обратите внимание, что сравнение класса объекта с классом и использование instanceof - это не одно и то же. Например:

"foo".getClass() == Object.class

ложно, тогда как

"foo" instanceof Object

правда.

Необходимость использования одного или другого зависит от ваших требований.

Это так больно. В настоящее время мы должныimplement Pattern Matching ourselves в каждом проекте.Proposal to add to language.
5

Ты хочешьinstanceof:

if (value instanceof Integer)

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

if (value.getClass() == Integer.class)

или же

if (Integer.class.equals(value.getClass())
14

чтобы вы могли использоватьvalue.getClass() == Integer.class, Тем не менее, более простой и канонический способ заключается в использованииinstanceof :

    if (value instanceof Integer) {
        System.out.println("This is an Integer");
    } else if(value instanceof String) {
        System.out.println("This is a String");
    } else if(value instanceof Float) {
        System.out.println("This is a Float");
    }

Заметки:

the only difference between the two is that comparing class tokens detects exact matches only, while instanceof C matches for subclasses of C too. However, in this case all the classes listed are final, so they have no subclasses. Thus instanceof is probably fine here.

as JB Nizet stated, such checks are not OO design. You may be able to solve this problem in a more OO way, e.g.

System.out.println("This is a(n) " + value.getClass().getSimpleName());
Спасибо большое, Питер Harsha
@GuillaumePolet, никаких проблем :-)
@ P & # xE9; terT & # xF6; r & # xF6; k Извините, я полностью устал и перепутал синтаксис & quot; ==. с «экземпляром одного». Я удалю свои комментарии, поскольку они не имеют отношения к делу.
3

value instanceof YourClass

Похожие вопросы