この基本クラスを取る:
public abstract class XMPPSubservice
{
protected XMPPService mTheService;
protected XMPPSubservice(Context context)
{
Intent intent = new Intent(context, XMPPService.class);
context.startService(intent);
}
public void onServiceInstance(XMPPService service) {
// TODO Auto-generated method stub
mTheService = service;
}
}
そして、この派生クラス:
public class PublicDataSubservice extends XMPPSubservice
{
private final SomeObject mObj = new SomeObject();
public PublicDataSubservice(Context context) {
super(context);
}
@Override
public void onServiceInstance(XMPPService service)
{
super.onServiceInstance(service);
mObj.doSomethingWith(mTheService);
}
}
目標は、mObj.doSomethingWith(mTheService);のみを呼び出すことでした。mTheServiceが有効になった後(これは基本クラスで発生しました)。それは常にmObjラインでNPEを吐き出していたということでした。なぜそうなったのかは理解できますが、私には不思議に見えます。それで、これはバグですか、それともDVMの機能ですか?JVMはどうですか?