Ich folge diesem post, um eine threadsichere Singleton-Klassen zu erstellen, aber es gibt einen Kompilierfehler in INSTANCE. Es sagte The blank final field INSTANCE may not have been initialized
. Meine Anforderung ist, ich will INSTANCE ist null und das Programm protokolliert diesen Fehler und versuchen Sie dieses Objekt erneut zu init. Wenn das Programm weiterhin fehlschlägt, wird das Programm beendet.Das leere letzte Feld INSTANCE wurde möglicherweise nicht initialisiert
public class ServiceConnection {
private static class SingletonObjectFactoryHolder{
private static final ServiceSoapBindingStub INSTANCE;
static
{
try {
INSTANCE = new ServiceSoapBindingStub();
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static ServiceSoapBindingStub getInstance() {
return SingletonObjectFactoryHolder.INSTANCE;
}
}
Aber wenn ich den Code wie folgt verwenden, einen weiteren Fehler: The final field INSTANCE may already have been assigned
public class ServiceConnection {
private static class SingletonObjectFactoryHolder{
private static final ServiceSoapBindingStub INSTANCE;
static
{
try {
INSTANCE = new ServiceSoapBindingStub();
} catch (AxisFault e) {
INSTANCE = null;
e.printStackTrace();
}
}
}
public static ServiceSoapBindingStub getInstance() {
return SingletonObjectFactoryHolder.INSTANCE;
}
}
Aber wenn ich den Code wie folgt verwenden keine Pop-up-Fehler.
public class ServiceConnection {
private static class SingletonObjectFactoryHolder{
private static final ServiceSoapBindingStub INSTANCE;
static
{
try {
INSTANCE = new ServiceSoapBindingStub();
} catch (AxisFault e) {
e.printStackTrace();
throw new RuntimeException();
}
}
}
public static ServiceSoapBindingStub getInstance() {
return SingletonObjectFactoryHolder.INSTANCE;
}
}
Warum das passiert?
Nun ja ... Sie sehen, dass TODO? Mach es :) Was willst du * wenn es einen 'AxisFault' gibt? Momentan hast du noch nichts "INSTANCE" zugewiesen ... vielleicht solltest du eine 'RuntimeException' einpacken' e'? Sie sind im Grunde sowieso an diesem Punkt abgespritzt ... –
Der Fehler "Das leere letzte Feld INSTANCE konnte nicht initialisiert werden" besagt einfach, dass Sie das Feld nicht initialisiert haben ... _private static final ServiceSoapBindingStub INSTANCE = null; _ sollte diese Nachricht loswerden. Natürlich hat Jon Recht, du musst deinen Code unbedingt verbessern. –
Dies entfernt die Fehlermeldung, aber nicht den Fehler. –