Java определить тип данных

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 l = new ArrayList(); , the type of the variable is List , the type of the value is ArrayList .

@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.

Читайте также:  Count number strings python

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

Splunk tutorial

SPSS tutorial

Swagger tutorial

T-SQL tutorial

Tumblr tutorial

React tutorial

Regex tutorial

Reinforcement learning tutorial

R Programming tutorial

RxJS tutorial

React Native tutorial

Python Design Patterns

Python Pillow tutorial

Python Turtle tutorial

Keras tutorial

Preparation

Aptitude

Logical Reasoning

Verbal Ability

Company Interview Questions

Artificial Intelligence

AWS Tutorial

Selenium tutorial

Cloud Computing

Hadoop tutorial

ReactJS Tutorial

Data Science Tutorial

Angular 7 Tutorial

Blockchain Tutorial

Git Tutorial

Machine Learning Tutorial

DevOps Tutorial

B.Tech / MCA

DBMS tutorial

Data Structures tutorial

DAA tutorial

Operating System

Computer Network tutorial

Compiler Design tutorial

Computer Organization and Architecture

Discrete Mathematics Tutorial

Ethical Hacking

Computer Graphics Tutorial

Software Engineering

html tutorial

Cyber Security tutorial

Automata Tutorial

C Language tutorial

C++ tutorial

Java tutorial

.Net Framework tutorial

Python tutorial

List of Programs

Control Systems tutorial

Data Mining Tutorial

Data Warehouse Tutorial

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 RSS Feed Subscribe to Get Email Alerts Facebook Page Twitter Page YouTube Blog Page

Источник

Как узнать тип переменной 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

Получить тип объекта в Java

  1. Получить тип объекта с помощью getClass() в Java
  2. Получить тип объекта с помощью instanceOf в Java
  3. Получить тип объекта класса, созданного вручную в 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.

Сопутствующая статья — Java Object

Источник

Оцените статью