newInstance() liefert null zurück

inv_zim

Gesperrter Benutzer
Hallo,

ich muss in einer Software Objekte dynamisch über den Klassennamen erstellen. Die Methode dafür sieht so aus, und lief bisher immer gut:

Java:
private CommunicationObject instantiateTransferObject(String comObjectClassPath) {
        CommunicationObject comObject = null;
        try{
            @SuppressWarnings("unchecked")
            Class<? extends CommunicationObject> comClass = (Class<? extends CommunicationObject>) Class.forName(comObjectClassPath);
            comObject = comClass.newInstance();
        } catch(ClassNotFoundException e) {
            e.printStackTrace();
        } catch(InstantiationException e) {
            e.printStackTrace();
        } catch(IllegalAccessException e) {
            e.printStackTrace();
        }
        return comObject;
    }

Ich versuche in diesem Beispiel eine Objekt der Klasse UserData zu erstellen:

Java:
public class UserData implements CommunicationObject {
    private static final long serialVersionUID= -3663712107665665551L;
    
    private long id= 0;
    private String name= null;
    private RoleData role= null;
    private String hash= null;
    
    public UserData() {
        System.out.println("Constructor UserData");
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id= id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name= name;
    }

    public RoleData getRole() {
        return role;
    }

    public void setRole(RoleData role) {
        this.role= role;
    }

    public String getHash() {
        return hash;
    }

    public void setHash(String hash) {
        this.hash= hash;
    }

    public String toString() {
        return name;
    }
}

Die Klasse "CommunicationObject" liegt in einem anderen Projekt, welches aber über Maven referenziert wird. Bevor ich das Projekt auf Maven umgestellt habe, lief es. Jetzt nicht mehr.

Der Aufruf forName liefert mir die richtige Klasse zurück, allerdings sind alle Werte der Variablen (im Debugger zu sehen) null. Wenn ich comClass.newInstance() aufrufe, bekomme ich null als returnValue.

Wenn ich mit dem Debugger einen Breakpoint im Konstruktor von UserData setze, sehe ich aber eindeutig, dass dieser aufgerufen wird. Habt ihr eine Idee, ich bin ratlos? :bahnhof:
 
Zuletzt bearbeitet:
S

SlaterB

Gast
sicher mit dem return-Value? Debugger sind immer zu misstrauen,
solange sie funktionieren ist ja gut, aber wenn es um unerklärliche Phänomene geht, kann System.out.prinln in gewissen Grenzen zuverlässiger sein,
sinnvoll ist z.B. eine Ausgabe direkt nach newInstance() um 100% zu garantieren, dass keine Exception geflogen ist,

Test-Programm:
Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        CommunicationObject c = instantiateTransferObject(UserData.class.getName());
        System.out.println("c ist null? " + (c == null));
        System.out.println(c);
    }

    private static CommunicationObject instantiateTransferObject(String comObjectClassPath)
    {
        CommunicationObject comObject = null;
        try
        {
            @SuppressWarnings("unchecked")
            Class<? extends CommunicationObject> comClass = (Class<? extends CommunicationObject>)Class.forName(comObjectClassPath);
            comObject = comClass.newInstance();
            System.out.println("nach new Instance noch am Leben");
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (InstantiationException e)
        {
            e.printStackTrace();
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace();
        }
        return comObject;
    }
}


interface CommunicationObject
{
}


class UserData
    implements CommunicationObject
{
    private static final long serialVersionUID = -3663712107665665551L;

    private long id = 0;
    private String name = null;
    // private RoleData role = null;
    private String hash = null;

    public UserData()
    {
        System.out.println("Constructor UserData");
    }

    public long getId()
    {
        return id;
    }

    public void setId(long id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getHash()
    {
        return hash;
    }

    public void setHash(String hash)
    {
        this.hash = hash;
    }

    public String toString()
    {
        return name;
    }
}
Ausgabe:
Code:
Constructor UserData
nach new Instance noch am Leben
c ist null? false
Exception in thread "main" java.lang.NullPointerException
	at java.io.Writer.write(Unknown Source)
	at java.io.PrintStream.write(Unknown Source)
	at java.io.PrintStream.print(Unknown Source)
	at java.io.PrintStream.println(Unknown Source)
	at test.Test.main(Test.java:11)
false klärt hier eindeutig dass ein Objekt erzeugt wurde,
die NullPointerException danach führt vielleicht zu der irrigen Annahme?
das liegt hier daran dass println() erstaunlicherweise mit einem Objekt, welches null als toString() zurückgibt, nicht klar kommt,
wußte ich selber noch gar nicht

wirkt sich bei dir vielleicht auch irgendwie aus? der Debugger könnte allein schon "null" als Beschreibung des vorhandenen Objektes ausgeben..,
ändere testweise deine toString()-Methode oder lasse sie weg

wenn du ganz andere Fehler wie falschen Parameter für Klassenname hast, dann kann es natürlich wieder ganz anders aussehen
 
Zuletzt bearbeitet von einem Moderator:

inv_zim

Gesperrter Benutzer
Du hast recht, das Objekt wird erstellt. War wohl eine falsche Schlussfolgerung von mir, Augen auf beim Debuggen :oops:

Ich versuche danach mit Dozer Daten von einem ins andere Objekt zu mappen und bekomme eine nicht sonderlich aussagekräftige Fehlermeldung, die hat dann wohl eine andere Ursache. Das hat mit dem Thema hier aber nichts mehr zu tun, denke ich. Danke für deine Hilfe!

Tim
 

ARadauer

Top Contributor
das liegt hier daran dass println() erstaunlicherweise mit einem Objekt, welches null als toString() zurückgibt, nicht klar kommt,
wußte ich selber noch gar nicht
kann ich mir nicht vorstellen...

Java:
public class NpeTest
{
    public static void main(String[] args)
    {
        String nullString = null;
        System.out.println(nullString);
        System.out.println(new NpeTest());
    }
    
    public String toString(){
        return null;
    }
}
null
null
kein Problem
 
S

SlaterB

Gast
vielleicht bei dir in anderer Java-Version,

der interne Code lautet:
Java:
PrintStream:
public void print(Object obj) {
      write(String.valueOf(obj)); // also write((String)null);
}

private void write(String s) {
	try {
	    synchronized (this) {
		ensureOpen();
		textOut.write(s); // BufferedWriter, Writer-Klasse bekommt den Aufruf
[..]

Writer:
    /**
     * Write a string.
     *
     * @param  str  String to be written
     *
     * @exception  IOException  If an I/O error occurs
     */
    public void write(String str) throws IOException {
	write(str, 0, str.length());
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
T IllegalAccessException in Methode newInstance() Allgemeine Java-Themen 3
8u3631984 Argument Captor liefert NULL zurück Allgemeine Java-Themen 2
DiekleineRatte77 Schlüsselworte ANSI Konverter liefert UTF-8 Allgemeine Java-Themen 7
Arif Math.cos liefert komische Werte Allgemeine Java-Themen 8
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
A Datentypen Long.valueOf liefert kein "L" am Ende Allgemeine Java-Themen 3
T Variablenübergabe liefert immer null Allgemeine Java-Themen 13
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
Q GregorianCalendar Methode add liefert komische Werte Allgemeine Java-Themen 3
T Datentypen ArrayUtils.indexOf( ... ) liefert -1 obwohl Wert scheinbar enthalten ist Allgemeine Java-Themen 15
T SimpleDateFormat.parse() liefert falschen Tag Allgemeine Java-Themen 2
T java.uil.Random liefert negative Werte Allgemeine Java-Themen 2
Z new Date() liefert falsche Uhrzeit Allgemeine Java-Themen 12
S Newton-Verfahren liefert nur 1 Wert Allgemeine Java-Themen 3
J Liefert new URL(String) gecachte Webseiten? Allgemeine Java-Themen 15
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
M Kugelschnittberechnung liefert falsche Werte Allgemeine Java-Themen 4
A md5 liefert unterschiedliche Testsummen? Allgemeine Java-Themen 4
S FOP liefert fehlerhafte PDF Allgemeine Java-Themen 13
S instanceof liefert true, aber cast funktioniert nicht! Allgemeine Java-Themen 6
MasterEvil File.createTempFile liefert nur kurzen Pfad mit Tilde Allgemeine Java-Themen 3
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
N contains(.) liefert nicht erwartetes Ergebnis Allgemeine Java-Themen 3
H JNI: loadLibrary liefert UnsatisfiedLinkError Allgemeine Java-Themen 2
J Base64 Kodierung liefert korrupte Dateien Allgemeine Java-Themen 3
S ´Locale.getDefault() liefert en Allgemeine Java-Themen 10
C ImageIO die read-Methode liefert mir ein null- Wert zurück Allgemeine Java-Themen 10
S aFile.delete() liefert false - Gründe ? Allgemeine Java-Themen 2
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
Zrebna SonarLint: Warum kein Null-Referencing-CodeSmell-Hint hier? Allgemeine Java-Themen 23
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
J Zahlen Abstand zur Null bestimmen Allgemeine Java-Themen 11
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
S An internal error occurred during: Launching null argument Allgemeine Java-Themen 1
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
L Google Guice Field Injection returns null Allgemeine Java-Themen 2
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
J Java Objekte = null, Garbagecollector Allgemeine Java-Themen 12
N MsgPack - Null Check Allgemeine Java-Themen 5
T JasperReports mit Null Pointer Allgemeine Java-Themen 3
DanielsLPecke Compiler-Fehler Warum ist der String null? Allgemeine Java-Themen 10
M Warten bis Variabel nicht null ist Allgemeine Java-Themen 18
Thallius Simple JSON Parser Error null Allgemeine Java-Themen 6
M Null byte in verschiedenen charsets Allgemeine Java-Themen 2
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
D Java Process OutputStream ist null Allgemeine Java-Themen 4
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
D Problem mit führender Null bei Schlüsselerzeugung Allgemeine Java-Themen 5
K Image beim catchen ist immer null Allgemeine Java-Themen 9
B Load of Known null Value Allgemeine Java-Themen 9
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
T Array Sortieren (null Werte ans Ende) Allgemeine Java-Themen 2
S Null Pointer Exception bei BufferedReader Allgemeine Java-Themen 4
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
Tobse Vererbung null aus Elternklasse "dominant"? Allgemeine Java-Themen 15
E Queue: Wie kann hier ein null-Pointer Exception auftreten?! Allgemeine Java-Themen 11
R Attribut null Allgemeine Java-Themen 6
C Regex: Zahl ohne führende Null Allgemeine Java-Themen 13
E rückgabewert ist immer null Allgemeine Java-Themen 2
N List auf null prüfen Allgemeine Java-Themen 2
TiME-SPLiNTER Von Unix, InputStreams und Null Bytes Allgemeine Java-Themen 2
R dateFormat - Uhr fängt nicht bei null an Allgemeine Java-Themen 2
P Null in ArrayList Allgemeine Java-Themen 3
N Strings mit null wiedergabe Splitten Allgemeine Java-Themen 4
mongole Formatter + null Allgemeine Java-Themen 4
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
A Umgang mit null Allgemeine Java-Themen 16
L Object = null? Allgemeine Java-Themen 16
L null pointer exception Allgemeine Java-Themen 10
nrg Leere Objektreferenz mit != null vergleichen Allgemeine Java-Themen 4
J Null Pointer in der compare-Methode des Comparators? Allgemeine Java-Themen 18
T Set.contains() auch false wenn value == null? Allgemeine Java-Themen 4
D Matrix, ArrayList, null-Zellen Allgemeine Java-Themen 6
F Hibernate speichern - Null Allgemeine Java-Themen 5
knuckles12 null pointer exception bei arrays Allgemeine Java-Themen 6
T WeakHashMap: Wie "null" effizient abfangen? Allgemeine Java-Themen 5
N Null Durchblick in Java, Jobwechsel? Allgemeine Java-Themen 19
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S JFreeChart LineChart Punkte über NULL Werte hinweg verbinden Allgemeine Java-Themen 5
N Array mit null Werten filtern Allgemeine Java-Themen 5
S Combobox --> liefer null? Allgemeine Java-Themen 3
A java.net.UnkownHostException: null bei jar-File Allgemeine Java-Themen 16
B Null Pointer Exception bei Canvas-objekt-Aufruf Allgemeine Java-Themen 12
H NullPointerException trotz Abfangen von null? Allgemeine Java-Themen 9
R if (obj == null || obj.isEmpty()) Allgemeine Java-Themen 21
P <null> in einer DB abfragen Allgemeine Java-Themen 4
G Nicht abgefangene Null-Pointer-Exception Allgemeine Java-Themen 2
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
M getResourceAsStream immer null Allgemeine Java-Themen 4
R Array komplett auf null setzen Allgemeine Java-Themen 10
A JasperReport Detail bringt null bei Datenübergabe Allgemeine Java-Themen 4
S Null Pointer Exception Allgemeine Java-Themen 10
S instanceof und null Allgemeine Java-Themen 7
M Führende Null in einem Datum Allgemeine Java-Themen 3
L null != null ? Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben