1

我是 Java 新手,Java 中是否有一种方法可以告诉您对象的类型?

例如在 Python 中,如果你输入

type(34)它会回来int

type('abc')会回来string

我一直在到处寻找,但我找不到这样做的方法。有什么帮助吗?

非常感谢。

4

2 回答 2

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 代码中进行了大量显式类型检查,则可能表明存在结构/设计问题。在大多数情况下,您不需要在运行时检查类型。(当然也有例外。)

于 2012-12-29T17:12:49.240 回答
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);
    }
于 2016-01-21T10:25:17.963 回答