typeOf而不使用getClass()或instanceof

时间:2015-06-18 16:29:15

标签: java types int typeof

我目前正在尝试使用System.out.print来输出整数x的类型。然而,根据我发现的,类似于typeOf的唯一函数是getClass,它不适用于int或instanceof,它似乎只适用于if。还有其他命令我可以尝试,还是我坚持使用System.out.print("Integer")

2 个答案:

答案 0 :(得分:4)

请注意,Java是静态类型语言。不需要在运行时检查变量基元类型,因为它在编译时已知并且无法更改。例如,如果您声明

int x = 5;

然后x不能是int以外的任何其他内容,因此尝试执行typeof(x)之类的操作(就像在其他语言中一样)是毫无意义的。

您可以对变量类型进行概括,将其分配给Object引用类型:

int x = 5;
Object obj = x;

但即使在这种情况下,obj也不会是int。在这种情况下,Java编译器会自动将您的x添加到Integer类型,因此obj.getClass().getName()将返回java.lang.Integerobj instanceof Integer将返回true。

答案 1 :(得分:1)

一般来说,如果您知道类型,就没有合理的理由,您不需要一个函数来为您解决问题。

唯一有用的时间是你无法计算出类型,例如因为你正在学习而且类型不明显。您可以使用像这样的重载函数来实现它。

public static void main(String[] args) {
    byte b = 1;
    byte a = 2;
    System.out.println("The type of a+b is "+typeOf(a+b));
    long l = 1;
    float f = 2;
    System.out.println("The type of l+f is "+typeOf(l+f));
}
public static String typeOf(byte b) {
    return "byte";
}
public static String typeOf(char ch) {
    return "char";
}
public static String typeOf(short s) {
    return "short";
}
public static String typeOf(int i) {
    return "int";
}
public static String typeOf(long i) {
    return "long";
}
public static String typeOf(float i) {
    return "float";
}
public static String typeOf(double i) {
    return "double";
}
public static String typeOf(boolean b) {
    return "boolean";
}
public static String typeOf(Object o) {
    return o.getClass().getName();
}

打印

The type of a+b is int
The type of l+f is float