私の質問は静的メソッドを使用した非静的フィールド初期化についてです。 は基本的に私のコードは、私がmyList
は(すべてのメソッド呼び出しで)この文の後にnullであるというのが私のスポックのテスト中に見つける非静的フィールドの初期化
@NoArgsConstructor
@Builder
public class MyClass implements Callable<MyResultClass>{{
@Setter private MyService service;
List<MyType> myList =
Collections.synchronizedList(new ArrayList<MyType>());
//.... other fields methods and so on
}
です。私はコンストラクタで初期化を解決しましたが、なぜそれがnullであるのか分かりません。誰も私にこの動作をexplaneすることができます、可能であれば、静的メソッドでフィールドの初期化をよりよく理解するために私にいくつかの参照を与えますか? ありがとう
私は皆さんに同意しますが、ここで何がうまくいかないのか分かりません。私はこのCallableインスタンスを作成するためにlombok builderを使用しています。私はここでの問題は、このテストをデバッグするとき、私は(刺激法では)それがnullである同期リストを使用する場合、それは、NullPointerExceptionがスローということに気づくことであるintellij2016
class InboundMessageListenerSpec extends Specification{
private MyService service = Mock(MyService)
given:
def myClassObject = MyClass.builder().service(service).build()
....other objects
when:
//stimulus that also starts the thread
then:
1 * service.myMethod()
}
には、このようなスポックのテストを実行します。
ビルダーを通常のインスタンス作成とフィールド注入で置き換えようとしましたが、すべてがアスペクトとして機能します。私はロンボクの建築業者の行動を調査する必要があります。
スタックトレース:
java.lang.NullPointerException: null
at org.fw.adapters.secondary.NetworkInventoryDataAdapter.deleteCvlanRows(NetworkInventoryDataAdapter.java:111)
at org.fw.kernel.flows.executors.StartMigrationExecutor.call(StartMigrationExecutor.java:114)
at org.fw.kernel.flows.executors.StartMigrationExecutor.call(StartMigrationExecutor.java:34)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
ライン111は、上記のリストのよく知られた問題です
できません。証拠をお願いします。初期化プロセスは、[Java言語仕様#12.5](http://docs.oracle.com/javase/specs/jls/se8/html/jls-12.html#jls-12.5)で定義されています。 – EJP
私がテストした 'mylist'は、新しい「MyClass」を作成したときに空のリストになります – passion
あなたのコードをもう少し投稿して、それがヌルであることを確認できますか? – Aelexe