确定java中对象的类型

时间:2011-10-04 10:42:58

标签: java types

说我有以下java代码:

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

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

请注意,我不是在谈论对象是从(这里是ArrayList)实例化的类型,而是在表达式左侧的类型,所以在上面的例子中对象 myObj和myList的列表

如何用正确的说法称这个“左手边”类型?

另外,我如何调用“右侧”类型?

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

此致

2 个答案:

答案 0 :(得分:4)

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

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

现在要在执行时找到变量的类型,你需要某种对变量本身的引用 as 一个变量。例如,如果它是一个字段(静态或实例),您可以获取相应的Field引用,则可以使用Field.getType()来询问类型。

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

调用myList.getClass()或类似的会做你想做的事情,因为这会处理myList,而不是变量本身。

答案 1 :(得分:3)

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

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

您可以致电var.getClass()确定动态类型。

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

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

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