如何使用另一个变量实例化变量?

时间:2012-09-27 03:27:52

标签: java object reference

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

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

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

只是为了澄清:我想要实现的是访问list1。我有一个包含list1的类,我需要修改list1的值。遗憾的是,该课程未提供list1的设定者,而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 个答案:

答案 0 :(得分:2)

我认为您要问的是,是否有使用list1初始化list2的间接方法。在Java中,更改list1值的唯一方法是为其分配内容。

在Java中,代码执行后list2将为null。与C ++(或C)不同,Java没有对引用(或指针指针)的引用,list2无法用于间接初始化list1

答案 1 :(得分:1)

在你的例子中,你不能。由于list1为空,因此您无法获取该行:

List<String> list2 = list1;

list2仍为空

请仔细阅读List API page。此外,如果您在DrJava交互窗格中尝试这一点,您会更好地看到它。如果您尝试在这两行之后添加一个字符串,则希望得到一个

java.lang.NullPointerException 

答案 2 :(得分:0)

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

list2 = new ArrayList(list1);可行。

看起来我误解了提问者想要的东西(我以为他只是指其他任何列表,而不是指向null的列表)。

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

答案 3 :(得分: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不提供设置对newnewInstance()以外的对象的引用的方法异常字符串,基元,但编译器也为它们做同样的事。