假设我声明了一个变量:
String a = "test";
我想知道它是什么类型的,也就是说,输出应该是java.lang.String,我该怎么做呢?
java.lang.String
a.getClass().getName()
如果你想要名字,就用马丁的方法。如果你想知道它是否是某个类的实例:
boolean b = a instanceof String
我同意Joachim Sauer所说的,不可能知道(变量类型!不是值类型!)除非你的变量是一个类属性(并且你必须检索类字段,通过名称获得正确的字段..)
实际上,对我来说,任何a.xxx().yyy()方法都完全不可能给你正确的答案,因为根据你调用这个方法的上下文,答案在完全相同的对象上是不同的……
a.xxx().yyy()
正如Teehoo所说,如果你知道编译一个定义的类型列表来测试,你可以使用InstanceOf,但你也会得到返回true的子类。
一种可能的解决方案是从java.lang.reflect.Field的实现中激发自己的灵感,并创建自己的Field类,然后将所有局部变量声明为此自定义Field实现。但你最好找到另一种解决方案,我真的很想知道为什么你需要变量类型,而不仅仅是值类型?
java.lang.reflect.Field
Field
我从搜索引擎中学习(我的英语很差,所以代码..) 如何获取变量的类型? 向上的:
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
扩展马丁的回答……
马丁斯溶液
扩展解决方案
如果你想让它与任何东西一起工作,你可以这样做:
((Object) myVar).getClass().getName() //OR ((Object) myInt).getClass().getSimpleName()
在基本类型的情况下,它将被包装(自动装箱)在相应的对象变量中。
示例#1(常规)
private static String nameOf(Object o) { return o.getClass().getSimpleName(); }
示例#2(泛型)
public static <T> String nameOf(T o) { return o.getClass().getSimpleName(); }
额外的学习
使用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 ... }
我认为我们有多种解决方案:
-为什么? 在Java中,每个类都继承自Object类本身。如果你有一个变量,你想知道它的类型。你可以用
或
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); }
This going to give us:
Find out more here: How to determine the primitive type of a primitive variable?
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