Как вы знаете тип переменной в Java? - PullRequest
122 голосов
/ 20 апреля 2010

Допустим, я объявляю переменную:

String a = "test";

И я хочу знать, какой это тип, то есть вывод должен быть java.lang.String Как мне это сделать?

Ответы [ 7 ]

214 голосов
/ 20 апреля 2010
a.getClass().getName()
31 голосов
/ 20 апреля 2010

Если вы хотите имя, используйте метод Мартина. Если вы хотите узнать, является ли это экземпляром определенного класса:

boolean b = a instanceof String

29 голосов
/ 05 февраля 2014

Я узнал из поисковой системы (мой английский очень плохой, так что код ...) Как получить тип переменной? Up's:

String str = "test";
String type = str.getClass().getName();
value: type = java.lang.String

этот метод:

str.getClass().getSimpleName();
value:String

сейчас пример:

Object o = 1;
o.getClass().getSimpleName();
value:Integer
21 голосов
/ 22 октября 2014

Я бы хотел остановиться на ответе Мартина там ...

Его решение довольно хорошее, но его можно настроить так, чтобы можно было напечатать любой «тип переменной» (на самом деле это тип значения, подробнее по теме ). Тем не менее, «твик» может быть сильным словом для этого. В любом случае, это может быть полезно.

Его решение было:

a.getClass().getName()

Если вы хотите, чтобы он работал с чем-либо, вы можете сделать это:

((Object) myVar).getClass().getName()
//OR
((Object) myInt).getClass().getSimpleName()

В этом случае примитив будет просто завернут в оболочку. В этом случае вы получите Объект примитива.

Я сам использовал это так:

private static String nameOf(Object o) {
    return o.getClass().getSimpleName();
}

Использование обобщений:

public static <T> String nameOf(T o) {
    return o.getClass().getSimpleName();
}
3 голосов
/ 25 сентября 2016

Использовать функцию перегрузки операторов в Java

class Test {

    void printType(String x) {
        System.out.print("String");
    }

    void printType(int x) {     
        System.out.print("Int");
    }

    // same goes on with boolean,double,float,object ...

}
3 голосов
/ 20 апреля 2010

Я согласен с тем, что сказал Йоахим Зауэр, и узнать его невозможно (тип переменной! Не тип значения!), Если только ваша переменная не является атрибутом класса (и вам нужно будет получить поля класса, получить правильное поле по имени). .)

На самом деле для меня совершенно невозможно, чтобы какой-либо метод a.xxx().yyy() дал вам правильный ответ, поскольку ответ был бы разным для одного и того же объекта в зависимости от контекста, в котором вы вызываете этот метод ...

Как сказал teehoo, если вы знаете при компиляции определенного списка типов для тестирования, вы можете использовать instanceof, но вы также получите подклассы, возвращающие true ...

Одним из возможных решений также было бы вдохновить себя реализацией java.lang.reflect.Field и создать собственный класс Field, а затем объявить все свои локальные переменные как эту пользовательскую реализацию Field ... но вам лучше найти другое решение, мне действительно интересно, зачем вам нужен тип переменной, а не только тип значения?

1 голос
/ 10 июля 2017

Я думаю, что у нас есть несколько решений здесь:

  • экземпляр может быть решением.

Почему? В Java каждый класс наследуется от самого класса Object. Так что если у вас есть переменная, и вы хотели бы знать ее тип. Вы можете использовать

  • System.out.println (((объекта) е) .getClass () GetName ().);

или

  • Integer.class.isInstance (1985); // дает истину

или

  • isPrimitive ()

    public static void main(String[] args) {
    
     ClassDemo classOne = new ClassDemo();
     Class classOneClass = classOne();
    
     int i = 5;
     Class iClass = int.class;
    
     // checking for primitive type
     boolean retval1 = classOneClass.isPrimitive();
     System.out.println("classOneClass is primitive type? = " + retval1);
    
     // checking for primitive type?
     boolean retval2 = iClass.isPrimitive();
     System.out.println("iClass is primitive type? = " + retval2);
    }
    

Это даст нам:

  1. FALSE
  2. ИСТИНА

Узнайте больше здесь: Как определить тип примитива примитивной переменной?

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

http://docs.oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html

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