繁体   English   中英

在Java中确定对象的类型

[英]Determining the type of an object in java

假设我有以下Java代码:

Object myObj = new ArrayList();
List myList = new ArrayList();

我想知道如何确定输入给定对象的类或接口。

请注意,我不是在说实例化对象的类型(在此为ArrayList),而是在表达式左侧的类型,因此在上面的示例中,myObj的对象为myObj, List的实例为myList。

我如何称呼这种“左侧”类型?

另外,如何称呼“右侧”类型?

如何以编程方式确定此“左侧”类型是什么?

问候,

左侧使用的类型不是object的类型。 这是变量的类型。 (静态或编译时类型。)

值得区分变量和对象-变量具有名称,类型和存储位置。 存储位置包含与变量类型兼容的值。

我们发现在执行时变量的类型,你需要某种形式的参考变量本身作为一个变量。 例如,如果它是一个字段(静态或实例),则可以获取适当的Field引用,可以使用Field.getType()询问类型。

如果它是局部变量,您会发现它有点困难。 如果您可以解释您要实现的目标 (而不是您认为会帮助您实现的机制),我们可能会提供更多帮助。

调用myList.getClass()或类似的操作将无法执行您想要的操作,因为这将处理myList ,而不是变量本身。

“左侧”类型称为静态类型

“右侧”类型称为动态类型

您可以通过调用var.getClass()确定动态类型。

确定静态类型的一种方法是使用函数重载:

public static void f(Object var) { ... }
public static void f(List var) { ... }

当调用f(var) ,编译器将使用var的静态类型来调用正确的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM