是否有可能在Java中获取未实例化变量的类型?

Mik*_*ava 4 java oop pointers object

是否有可能获得在Java中声明(但未实例化)的变量的类型?例如:

public class Foo {

     FooTwo foo2;
     FooTwo foo3;
     FooThree foo4;

     public static void main(String[] args) {
         if (foo2.getClass() == foo3.getClass()) {
             System.out.println("foo2 is the same type as foo3");
         }
         if (foo3.getClass() == foo4.getClass()) {
             System.out.println("foo3 is the same class as foo4");
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

随着输出:

foo2 is the same type as foo3
Run Code Online (Sandbox Code Playgroud)

显然,该方法getClass()不适用于未实例化的变量,因此该代码不起作用.我假设我要查找的信息存储在变量(指针?)的某处,以确保类型安全,并且可以访问它.有可能实现这种比较吗?

原因:我有一个带有几个声明变量的类.这些变量应该指向存储在另一个类的ArrayList中的对象.我正在尝试创建一个方法,将初始化(但未实例化)的变量作为参数,扫描arraylist以查找与初始化变量的类型匹配的对象,并将变量设置为对象(使变量指向对象).

另外:系统的要点是删除类的构造函数中的耦合.无法立即或在构造函数中实例化对象.

rua*_*akh 7

首先,你需要知道的之间的差别类型的表达式和运行时类型的值.例如,考虑以下代码:

List<String> list = new ArrayList<String>();
System.out.println(list.getClass());
Run Code Online (Sandbox Code Playgroud)

上面的代码不打印class java.util.ArrayList,java.util.List<java.lang.String>因为getClass()返回list引用的对象的运行时类型,而不是其list自身的类型.

因此调用getClass()未初始化的变量没有意义,因为它没有返回运行时类型的值.


我正在尝试创建一个方法,该方法将初始化(但未实例化)的变量作为参数,[...]并将变量设置为对象(使变量指向对象).

由于Java是一种按值传递的语言,因此它不会公开修改作为参数传入的变量的方法.例如,考虑这种方法:

public void doNothing(Object obj) {
    obj = "obj";
}
Run Code Online (Sandbox Code Playgroud)

上述方法绝对没有.它有一个局部变量obj,它最初包含传入的任何引用,然后更改为引用字符串"obj"; 但是这个改变没有效果,因为obj在那一点之后没有任何实际使用局部变量.特别是,此方法对传入的任何引用都没有任何影响.

你最接近的是使用反射; 如果您的方法采用类型Field的实例,它可以检查字段的声明类型,并将字段设置为其选择的值.