0

超基本的な質問のように感じますが、頭を包むことはできません。

クラス PriceGroup があり、オブジェクトを作成しているコンストラクターはありません。

class SmallPortfolio{
String id;  
// all the investments (stocks) belonging to this portfolio.
List<Investment> invList = new ArrayList<Investment>(); 
}

別のクラスで、Spor という名前の SmallPortfolio オブジェクトを作成しています。

//
String id = InstanceID.getTextNormalize(); //this value is taken from an element from jdom.
SmallPortfolio Spor;
Spor.id = id; 
//some code that creates a list of investments
//some code that creates a list of SmallPortfolio objects

Javaでは、nullオブジェクトのフィールドにNullPointerExceptionで取得した値をどのように与えるのですか? 別の解決策は、null ではない SmallPortfolio オブジェクトを宣言することです。

奇妙な問題ですが、私が使用しているテスト プログラムは変更できず、SmallPortfolio のコンストラクタもありません。

4

4 に答える 4

4

いくつかのコンストラクターを自分で定義しない限り、Java は引数のないデフォルトのコンストラクターを自動的に作成します。したがって、次のように書くことができます。

SmallPortfolio smallPort = new SmallPortfolio();

ただし、あなたの場合、 SmallPortfolio クラスの作成者はおそらくアドホック コンストラクターを提供しているはずです。

class SmallPortfolio{
    private final String id;  
    // all the investments (stocks) belonging to this portfolio.
    private final List<Investment> investments = new ArrayList<Investment>(); 

    public SmallPortfolio(String id) {
        this.id = id;
    }

    //getters + methods to add / remove investments
}
于 2012-11-11T07:37:43.123 に答える
2

Spor を初期化するだけです。

SmallPortfolio Spor = new SmallPortfolio();

これにより、null 以外のオブジェクトが作成されます。また、各初期化の後に ID を追加する場合は、それをコンストラクターに追加することもできます。それが役立つことを願っています!

于 2012-11-11T07:37:20.100 に答える
1

質問は少し不明確ですが、フィールドを割り当てたり、null オブジェクトでメソッドを呼び出したりできるかどうかを尋ねている場合は、いいえ、できません。クラスのインスタンスを持つ (または作成する) 必要があります。

 SmallPortfolio Spor = new SmallPortfolio();
 Spor.id = id; 

に値 (null でさえ) を割り当てていないため、上記のコードはコンパイルすることさえできませんSpor。(を割り当てるnullと、実行時に nullpointer 例外が発生します)。

コンストラクターがない場合にオブジェクトを作成する方法が混乱した場合: この場合、コンストラクターが 1 つあり、Java コードでコンストラクターが指定されていない場合 (その場合のみ)、引数を必要としない自動デフォルト コンストラクターが存在するためです。 .

于 2012-11-11T07:39:05.737 に答える
1

Spor初期化されません:

SmallPortfolio Spor;

と置換する:

SmallPortfolio Spor = new SmallPortfolio();
于 2012-11-11T07:37:43.823 に答える