0

参照している別の変数を介して変数をインスタンス化するにはどうすればよいですか? 例えば:

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

list2 を使用してインスタンス化するにはどうすればよいlist1ですか? list1で簡単にインスタンス化できることはわかっていますlist1 = new ArrayList();。しかし、私が知りたいのは、上記のケースで list2 を使用して list1 をインスタンス化できるかどうかです。

明確にするために:私が達成したいのは、list1にアクセスできるようにすることです。を含むクラスがありlist1、の値を変更する必要がありますlist1。残念ながら、そのクラスはセッターを提供しておらず、list1まだlist1null です。

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では、コードの実行後になりますlist2nullC ++(またはC)とは異なり、Javaには参照への参照(またはポインターへのポインター)がなく、list2間接的に初期化するために使用できる方法はありませんlist1

于 2012-09-27T03:33:40.130 に答える
1

あなたの例では、できません。は null であるためlist1、次の行ではどこにも到達しません。

List<String> list2 = list1;

list2まだヌルだろう

List API ページを熟読してください。また、DrJava インタラクション ペインでこれを試してみると、よりよくわかるでしょう。これらの 2 行の後に文字列を追加しようとすると、

java.lang.NullPointerException 
于 2012-09-27T03:31:46.223 に答える
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()、コンパイラはそれらに対しても同じことを行います。

于 2012-09-27T04:54:59.420 に答える
0

すべてのコレクションには、そのコレクションの反復子 (ArrayList の場合) によって返されたのと同じ順序でコレクションのコピーを作成するパラメーターとしてコレクションを受け取るコンストラクターがあります。

list2 = new ArrayList(list1);動作します。

質問者が何を望んでいたかを誤解していたようです (彼は null を指すリストではなく、他のリストを意味していると思いました)。

その場合、list1 に何が割り当てられていても、list2 は常に null になります。

于 2012-09-27T03:31:18.457 に答える