0

如何通过引用它的另一个变量来实例化一个变量?例如:

List<String> list1 = null;
List<String> list2 = list1;

如何list1使用 list2 进行实例化?我知道list1可以很容易地用list1 = new ArrayList();. 但我想知道的是,在上述情况下,是否可以使用 list2 实例化 list1?

只是为了澄清:我想要实现的是可以访问 list1。我有一个包含的类,list1我需要修改list1. 不幸的是,该类没有提供 setterlist1并且list1仍然为空。

public class Class1
{
    private List<String> list1 = null;
    public List getList1()
    {
        return list1; //value of list1 is null.
    }
}

public class Class2
{
    public static void main(String[] args)
    {
        Class1 class1 = new Class1();

        // then I need to set the value of list1.
        // However, list1 did not provide a setter method
        // so my only way to access it is using a reference.

        // with the code below I am assuming that I can
        // create a reference to list1 and set its value.
        // How do I set the value of list1?
        List<String> list2 = class1.getList1(); 
    }
}
4

4 回答 4

2

我认为您要问的是是否有一些间接的初始化list1方式使用list2. 在 Java 中,改变 的值的唯一方法list1是给它赋值。

在 Java 中,list2null在您的代码执行之后。与 C++(或 C)不同,Java 没有对引用的引用(或指向指针的指针),没有办法list2可以用来间接初始化list1.

于 2012-09-27T03:33:40.130 回答
1

在你的例子中,你不能。由于list1为空,因此您将无法到达任何地方:

List<String> list2 = list1;

list2仍然是空的

请仔细阅读列表 API 页面。此外,如果您在 DrJava 交互窗格中尝试此操作,您会更好地看到它。如果您尝试在这两行之后添加一个字符串,期望得到一个

java.lang.NullPointerException 
于 2012-09-27T03:31:46.223 回答
0

所有集合都有一个构造函数,该构造函数将集合作为参数,以与该集合的迭代器返回的顺序相同的顺序生成集合的副本(在 ArrayList 的情况下)。

list2 = new ArrayList(list1);会工作。

看起来我误解了提问者想要什么(我认为他的意思只是任何其他列表,而不是指向 null 的列表)。

在这种情况下,无论分配给 list1 什么,list2 都将始终为 null。

于 2012-09-27T03:31:18.457 回答
0

您可以扩展该类并通过扩展它来提供您自己的 getList1() 方法实现。

public class Class2 extends class1
{
    private List<String> list1 = new ArrayList<String>();
    public List getList1()
    {
    return list1; //value of list1 is null.
    }
}

上面的原因不起作用是你的list1包含null引用和java没有提供一种方法来设置对对象的引用,而不是new一些newInstance()异常字符串,原语,但编译器也为它们做同样的事情。

于 2012-09-27T04:54:59.420 回答