如何通过引用它的另一个变量实例化变量?例如:
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();
}
}
答案 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不提供设置对new
或newInstance()
以外的对象的引用的方法异常字符串,基元,但编译器也为它们做同样的事。