我是Java的新手,Java中是否有一种方法可以告诉您对象的类型?
例如在Python中键入
type(34)
它会返回int
type('abc')
会返回string
我一直在寻找各处,但我找不到办法。有什么帮助吗?
非常感谢。
答案 0 :(得分:12)
instanceof
运算符是进行运行时类型检查的最便捷方式:
if (someObject instanceof String) {
// It's a string
}
或者,在任何实例上,您都可以使用getClass
,它为您提供了对象类型的Class
实例。
Class c = someObject.getClass();
Class
实例将有getName
方法,您可以调用该方法获取名称的字符串版本(以及许多其他方便的方法)。
您可以使用Class
从类型名称中获取.class
对象,例如:
Class stringClass = String.class;
正如Peter Lawrey在评论中指出的那样,所有这些假设你都在处理对象引用,而不是原语。没有办法对基元执行运行时类型检查,但这没关系,因为与对象引用(编译时声明可能是Object
)不同,由于声明,您始终知道原始类型是什么。它只是真正出现的对象类型。
如果您发现自己在Java代码中进行了大量显式类型检查,则可能表明结构/设计问题。在大多数情况下,您不需要在运行时检查类型。 (当然有例外。)
答案 1 :(得分:0)
基本上我们可以通过使用覆盖
的方法来实现我们的目标 class GetType {
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");
}
}
public static void main(String args[]) {
double doubleVar = 1.5;
int intVar = 7;
float floatVar = 1f;
GetType objType = new GetType();
objType.printType(doubleVar);
objType.printType(intVar);
objType.printType(floatVar);
}