你怎么知道在java中的variablestypes?

假设我声明了一个variables:

String a = "test"; 

我想知道它是什么types,即输出应该是java.lang.String我该怎么做?

 a.getClass().getName() 

如果你想要的名字,使用马丁的方法。 如果你想知道它是否是某个类的实例:

boolean b = a instanceof String

我从search引擎学到了(我的英文很糟糕,所以代码…)如何获取variables的types? UPS :

 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 

我想就马丁在那里的回答展开…

他的解决scheme相当不错,但可以调整,所以任何“variablestypes”可以这样打印(实际上它是值types, 更多的话题 )。 没有多less调整,因为它指出了一种可能性。

他的解决scheme是:

 a.getClass().getName() 

如果你想要它与任何你可以做到这一点:

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

在这种情况下,原语将被简单地包装在一个包装中。 在这种情况下,您将获得原始对象。

我自己就是这样用的:

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

使用generics:

 public static <T> String nameOf(T o) { return o.getClass().getSimpleName(); } 

使用java的运算符重载function

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

我同意Joachim Sauer所说的,除非你的variables是一个类属性,否则不可能知道(variablestypes!不是值types!)(你必须检索类字段,按名称获取正确的字段)

实际上对于我来说,任何a.xxx().yyy()方法都给你正确的答案是完全不可能的,因为根据你调用这个方法的上下文,答案在完全相同的对象上是不同的。

如teehoo说,如果你知道在编译一个定义的types列表来testing你可以使用instanceof,但你也会得到子类返回true …

一个可能的解决scheme也是激发自己实现java.lang.reflect.Field并创build自己的Field类,然后将所有本地variables声明为这个自定义的Field实现…但是您最好find另一个解决scheme,我真的想知道为什么你需要variablestypes,而不仅仅是值types?

我认为我们在这里有多个解决scheme:

  • 可能是一个解决scheme。

为什么? 在Java中,每个类都是从Object类inheritance的。 所以,如果你有一个variables,你想知道这种types的工作。

  • 的System.out.println(((对象)F).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. 真正

在这里find更多: 如何确定原始variables的原始types?

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