如何检查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。 这些例子包括ArrayList
, LinkedList
等
如果你有一个List
variables,并且你需要知道它是否是一个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()); }
}