如何检查Java中的variablestypes?

我如何检查,以确保我的variables是一个int,数组,双等…?

编辑:例如,我怎样才能检查一个variables是一个数组? 有这个function吗?

Java是一种静态types的语言,因此编译器会为您检查大部分内容。 一旦你声明一个variables是一个特定的types,编译器将确保它只被分配了那个types的值(或者是那个types的子types的值)。

你给的例子(int,array,double)这些都是原语,并且没有它们的子types。 因此,如果你声明一个variables是一个int

 int x; 

你可以肯定它只会保持int值。

如果你声明一个variables是List ,那么这个variables可能会保存List子types。 这些例子包括ArrayListLinkedList

如果你有一个Listvariables,并且你需要知道它是否是一个ArrayList ,你可以执行以下操作:

 List y; ... if (y instanceof ArrayList) { ...its and ArrayList... } 

但是,如果您发现自己认为需要这样做,您可能需要重新考虑您的方法。 在大多数情况下,如果你遵循面向对象的原则,你不需要这样做。 当然,每条规则都有例外。

实际上,通过滥用Java的方法超载能力,很容易推出自己的testing工具。 虽然我仍然好奇,如果有一个官方的方法在sdk。

例:

 class Typetester { void printType(byte x) { System.out.println(x + " is an byte"); } void printType(int x) { System.out.println(x + " is an int"); } void printType(float x) { System.out.println(x + " is an float"); } void printType(double x) { System.out.println(x + " is an double"); } void printType(char x) { System.out.println(x + " is an char"); } } 

然后:

 Typetester t = new Typetester(); t.printType( yourVariable ); 

a.getClass().getName() – 将为您提供由a引用的实际对象的数据types,而不是variablesa最初声明为或随后转换为的数据types。

boolean b = a instanceof String – 会告诉你boolean b = a instanceof String的实际对象是否是一个特定类的实例。 同样,variablesa最初被声明为或随后被转换的数据types与instanceof运算符的结果没有关系。

我从这个信息: 你怎么知道在Java中的variablestypes?

这可能发生。 我试图parsing一个String到一个int,我想知道是否我的Integer.parseInt(s.substring(a, b))踢出一个int或垃圾之前,我总结一下。

顺便说一句,这被称为reflection。 以下是关于此主题的更多信息: http : //docs.oracle.com/javase/tutorial/reflect/

您可以使用Integer而不是int,Double而不是double等(这些类对于所有基本types都是存在的)。 那么你可以使用运算符instanceof,就像if(var instanceof Integer){...}

你的问题的第一部分是没有意义的。 没有在编译时不知道原始variables的types的情况。

回想第二部分,唯一不知道variables是否是数组的情况就是它是一个对象。 在这种情况下, object.getClass().isArray()会告诉你。

我使用它: if(x.getClass() == MyClass.class){...}

那么,我认为检查variables的types可以这样做。

 public <T extends Object> void checkType(T object) { if (object instanceof Integer) System.out.println("Integer "); else if(object instanceof Double) System.out.println("Double "); else if(object instanceof Float) System.out.println("Float : "); else if(object instanceof List) System.out.println("List! "); else if(object instanceof Set) System.out.println("Set! "); } 

这样你不需要有多个重载的方法。 由于附加的好处,我认为在数组上使用集合是很好的做法。 话虽如此,我不知道如何检查数组types。 也许有人可以改进这个解决scheme 希望这可以帮助!

PS是的,我知道这也不检查原语。

我对这些答案中的任何一个都不满意,正确的答案没有解释和反对票,所以我search了一些东西,find了一些东西,编辑起来,这样很容易理解。 玩一玩吧,不像人们希望的那么直截了当。

 //move your variable into an Object type Object obj=whatYouAreChecking; System.out.println(obj); // moving the class type into a Class variable Class cls=obj.getClass(); System.out.println(cls); // convert that Class Variable to a neat String String answer = cls.getSimpleName(); System.out.println(answer); 

这里是一个方法:

 public static void checkClass (Object obj) { Class cls = obj.getClass(); System.out.println("The type of the object is: " + cls.getSimpleName()); } 

公共类Demo1 {

 Object printType(Object o) { return o; } public static void main(String[] args) { Demo1 d=new Demo1(); Object o1=d.printType('C'); System.out.println(o1.getClass().getSimpleName()); } 

}