你怎么知道在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); }
这将给我们:
- 假
- 真正
在这里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