- How do you know a variable type in java? [duplicate]
- 7 Answers 7
- Java определить тип данных
- Learn Latest Tutorials
- Preparation
- Trending Technologies
- B.Tech / MCA
- Javatpoint Services
- Training For College Campus
- Как узнать тип переменной java
- Получить тип объекта в Java
- Получить тип объекта с помощью getClass() в Java
- Получить тип объекта с помощью instanceOf в Java
- Получить тип объекта класса, созданного вручную в Java
- Сопутствующая статья — Java Object
How do you know a variable type in java? [duplicate]
Are you really interested in the type of the variable? Or do you care about the type of the value? Because the type of the variable can’t easily be gotten (in fact it’s not possible at all for local variables and requires reflection for fields).
@Paul: Consider Object o = «o»; — the type of the variable is Object, the type of the value is String.
@Paul In List
@AjayThakur — it’s the difference between the compile-time (static) type and the runtime (dynamic) type.
7 Answers 7
I just figured that was what the OP was really looking for since the declaration of a is pretty obvious at compile time
@Miguel: since the only way you can handle an int value is in an int variable, there’s no way to write code that handles a int value and doesn’t know that type. The matter is different in case you’re handling a wrapper like Integer , but then the code of this answer works again.
Expanding on Martin’s answer.
Martins Solution
Expanded Solution
If you want it to work with anything you can do this:
((Object) myVar).getClass().getName() //OR ((Object) myInt).getClass().getSimpleName()
In case of a primitive type, it will be wrapped (Autoboxed) in a corresponding Object variant.
Example #1 (Regular)
private static String nameOf(Object o)
Example #2 (Generics)
public static String nameOf(T o)
Additional Learning
- Material on Java Types, Values and Variables: https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html
- Autoboxing and Unboxing: https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
- Docs on Pattern Matching for instanceof: https://docs.oracle.com/en/java/javase/14/language/pattern-matching-instanceof-operator.html
Interesting. I just tried your code on: System.out.println( ( (Object) Integer.parseInt(«12») ).getClass().getSimpleName() ); and it works! \o/
Thank you very much, before the getSimpleName() , I tried to use (Stack)(variable.getClass().toString().split(«.»)).pop() and it didn’t work, I was using JavaScript logic and type casted it into stack to pop the last element after spliting with . and it didn’t work.
I have a little problem with my code. The last condition below is supposed to return true, but it doesn’t. The variable result is a double and equal to 2.5. I tried to figure out how to fix it with this piece of code
System.out.println(«Result is: » + result); System.out.println(«The datatype of result is: » + result.getClass().getName()); System.out.println(«String.valueOf(result) is: » + String.valueOf(result)); System.out.println(«The datatype of result is: » + String.valueOf(result).getClass().getName()); System.out.println(«df.format(result) is: » + df.format(result)); System.out.println(«The datatype of result is: » + df.format(result).getClass().getName());
System.out.println(«Is String.valueOf(result) equal to df.format(result): » + String.valueOf(result).equals(df.format(result))); However, my IntelliJ IDEA «cannot resolve method ‘getClass()'» when applied to result directly (the second line of the code). Could you tell me please why that’s so?
If you want the name, use Martin’s method. If you want to know whether it’s an instance of a certain class:
boolean b = a instanceof String
Thic code Double a = 1d; boolean b = a instanceof String; will cause error error: incompatible types: Double cannot be converted to String
I learned from the Search Engine(My English is very bad , So code. ) How to get variable’s type? 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
Use operator overloading feature of 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 . >
I think we have multiple solutions here:
Why? In Java every class is inherited from the Object class itself. So if you have a variable and you would like to know its type. You can use
I agree with what Joachim Sauer said, not possible to know (the variable type! not value type!) unless your variable is a class attribute (and you would have to retrieve class fields, get the right field by name. ) Actually for me it’s totally impossible that any a.xxx().yyy() method give you the right answer since the answer would be different on the exact same object, according to the context in which you call this method. As teehoo said, if you know at compile a defined list of types to test you can use instanceof but you will also get subclasses returning true. One possible solution would also be to inspire yourself from the implementation of java.lang.reflect.Field and create your own Field class, and then declare all your local variables as this custom Field implementation. but you’d better find another solution, i really wonder why you need the variable type, and not just the value type?
Java определить тип данных
Learn Latest Tutorials
Preparation
Trending Technologies
B.Tech / MCA
Javatpoint Services
JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.
- Website Designing
- Website Development
- Java Development
- PHP Development
- WordPress
- Graphic Designing
- Logo
- Digital Marketing
- On Page and Off Page SEO
- PPC
- Content Development
- Corporate Training
- Classroom and Online Training
- Data Entry
Training For College Campus
JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week
Like/Subscribe us for latest updates or newsletter
Как узнать тип переменной java
В Java можно узнать тип переменной, используя оператор instanceof . Он позволяет проверить, является ли объект экземпляром определенного класса.
public class Main public static void main(String[] args) String str = "Hello, Hexlet!"; Integer integer = 123; System.out.println(str instanceof String); // => true System.out.println(integer instanceof Integer); // => true System.out.println(str instanceof Object); // => true System.out.println(integer instanceof Object); // => true > >
В этом примере мы объявляем переменные str и integer , типы которых String и Integer соответственно. Затем мы используем оператор instanceof для проверки, являются ли эти переменные экземплярами классов String , Integer или Object .
Как видно из примера, переменная str является экземпляром класса String , а переменная integer — экземпляром класса Integer . Кроме того, обе переменные также являются экземплярами класса Object , так как все классы в Java наследуются от этого класса.
Получить тип объекта в Java
- Получить тип объекта с помощью getClass() в Java
- Получить тип объекта с помощью instanceOf в Java
- Получить тип объекта класса, созданного вручную в Java
В этой статье мы узнаем, как получить тип объекта в Java. Если объект поступает из источника, полезно проверить тип объекта. Это место, где мы не можем проверить тип объектов, например из API или частного класса, к которому у нас нет доступа.
Получить тип объекта с помощью getClass() в Java
В первом методе мы проверяем тип Object классов-оболочек, таких как Integer и String . У нас есть два объекта, var1 и var2 , для проверки типа. Мы воспользуемся методом getClass() класса Object , родительского класса всех объектов в Java.
Проверяем класс по условию если . Поскольку классы-оболочки также содержат класс поля, возвращающий тип, мы можем проверить, чей тип совпадает с var1 и var2 . Ниже мы проверяем оба объекта трех типов.
public class ObjectType public static void main(String[] args) Object var1 = Integer.valueOf("15"); Object var2 = String.valueOf(var1); if (var1.getClass() == Integer.class) System.out.println("var1 is an Integer"); > else if (var1.getClass() == String.class) System.out.println("var1 is a String"); > else if (var1.getClass() == Double.class) System.out.println("var1 is a Double"); > if (var2.getClass() == Integer.class) System.out.println("var2 is an Integer"); > else if (var2.getClass() == String.class) System.out.println("var2 is a String"); > else if (var2.getClass() == Double.class) System.out.println("var2 is a Double"); > > >
var1 is an Integer var2 is a String
Получить тип объекта с помощью instanceOf в Java
Другой способ получить тип объекта в Java — использовать функцию instanceOf ; он возвращается, если экземпляр объекта совпадает с заданным классом. В этом примере у нас есть объекты var1 и var2 , которые проверяются с этими тремя типами: Integer , String и Double ; если какое-либо из условий выполняется, мы можем выполнить другой код.
Поскольку var1 имеет тип Integer , условие var1 instanceOf Integer станет истинным, а var2 — Double , так что var2 instanceOf Double станет истинным.
public class ObjectType public static void main(String[] args) Object var1 = Integer.valueOf("15"); Object var2 = Double.valueOf("10"); if (var1 instanceof Integer) System.out.println("var1 is an Integer"); > else if (var1 instanceof String) System.out.println("var1 is a String"); > else if (var1 instanceof Double) System.out.println("var1 is a Double"); > if (var2 instanceof Integer) System.out.println("var2 is an Integer"); > else if (var2 instanceof String) System.out.println("var2 is a String"); > else if (var2 instanceof Double) System.out.println("var2 is a Double"); > > >
var1 is an Integer var2 is a Double
Получить тип объекта класса, созданного вручную в Java
Мы проверили типы классов-оболочек, но в этом примере мы получаем тип трех объектов трех созданных вручную классов. Мы создаем три класса: ObjectType2 , ObjectType3 и ObjectType4 .
ObjectType3 наследует ObjectType4, а ObjectType2 наследует ObjectType3. Теперь мы хотим узнать тип объектов всех этих классов. У нас есть три объекта: obj , obj2 и obj3 ; мы используем оба метода, которые мы обсуждали в приведенных выше примерах: getClass () и instanceOf.
Однако есть отличия между типом obj2 . Переменная obj2 вернула тип ObjectType4 , а ее класс — ObjectType3 . Это происходит потому, что мы наследуем класс ObjectType4 в ObjectType3 , а instanceOf проверяет все классы и подклассы. obj вернул ObjectType3 , потому что функция getClass() проверяет только прямой класс.
public class ObjectType public static void main(String[] args) Object obj = new ObjectType2(); Object obj2 = new ObjectType3(); Object obj3 = new ObjectType4(); if (obj.getClass() == ObjectType4.class) System.out.println("obj is of type ObjectType4"); > else if (obj.getClass() == ObjectType3.class) System.out.println("obj is of type ObjectType3"); > else if (obj.getClass() == ObjectType2.class) System.out.println("obj is of type ObjectType2"); > if (obj2 instanceof ObjectType4) System.out.println("obj2 is an instance of ObjectType4"); > else if (obj2 instanceof ObjectType3) System.out.println("obj2 is an instance of ObjectType3"); > else if (obj2 instanceof ObjectType2) System.out.println("obj2 is an instance of ObjectType2"); > if (obj3 instanceof ObjectType4) System.out.println("obj3 is an instance of ObjectType4"); > else if (obj3 instanceof ObjectType3) System.out.println("obj3 is an instance of ObjectType3"); > else if (obj3 instanceof ObjectType2) System.out.println("obj3 is an instance of ObjectType2"); > > > class ObjectType2 extends ObjectType3 int getAValue3() System.out.println(getAValue2()); a = 300; return a; > > class ObjectType3 extends ObjectType4 int getAValue2() System.out.println(getAValue1()); a = 200; return a; > > class ObjectType4 int a = 50; int getAValue1() a = 100; return a; > >
obj is of type ObjectType2 obj2 is an instance of ObjectType4 obj3 is an instance of ObjectType4
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.