Union in einem Struct in JNA

Diskutiere Union in einem Struct in JNA im Allgemeine Java-Themen Bereich.
D

Der_AltMann

Ich habe ein Struct, indem sich mit einem Union mehrere Structs befinden.
Ich habe dies in Java so realisiert:

Java:
@FieldOrder ({"busType","data"})
public class XLbusParams extends Structure {

    public int busType;
    public UNION data;
        
    public XLbusParams() {
        super();
    }

    public class UNION extends Union{
        
        public byte[] raw = new byte[(28)];
        public can can = new can();
        public canFD canFD = new canFD();
        public most most = new most();
        public flexray flexray = new flexray();
        public ethernet ethernet = new ethernet();
        public a429 a429 = new a429();
        
        public UNION() {
            super();
        }
        

        
    }
Wenn ich den meinen Code ausführe kommt der Fehler:
Can't create an instance of class Structs.XLbusParams$UNION, requires a public no-arg constructor: java.lang.NoSuchMethodException: Structs.XLbusParams$UNION.<init>()

Ich bin mir unsicher warum hier ein Fehler mit einem fehlenden no-arg constructor, da ich ja eigentlich einen habe
 
mrBrown

mrBrown

Der Konstruktor von UNION hat als ersten Parameter ein XLbusParams. Das wird vom Compiler automatisch bei inneren Klassen hinzugefügt, darüber haben sie Zugriff auf die umgebene Klasse.

Klasse einfach static machen löst das Problem :)
 
D

Der_AltMann

Der Konstruktor von UNION hat als ersten Parameter ein XLbusParams. Das wird vom Compiler automatisch bei inneren Klassen hinzugefügt, darüber haben sie Zugriff auf die umgebene Klasse.

Klasse einfach static machen löst das Problem :)
Dann verliere ich aber die Möglichkeit über ein Objekt darauf zuzugreifen oder?
Die XLbusParams Klasse ist ein Struct, das in einem Struct liegt. Ich greife darauf über ein Objekt zu, das mir die Methode(die auf nativen Code zugreift) zurückgibt bzw befüllt.
 
mrBrown

mrBrown

Ah Moment, ich glaube du verstehst static an der Stelle falsch.

So wie du es aktuell hast, gehört die Klasse UNION zu einem Objekt der Klasse XLbusParams. Wenn du die Klasse UNION static machst, gehört die Klasse UNION zu der Klasse XLbusParams.

Mit Objekten arbeitest du in beiden Fällen – im ersten Fall brauchst du aber immer ein Objekt der Klasse XLbusParams, um die Klasse UNION überhaupt benutzen zu können, du kannst nicht einfach ein UNION-Objekt erstellen.
Mit static ist das möglich, dann lässt sich UNION nutzen wie eine ganz normale Klasse, und soweit ich das sehe ist es in diesem Fall auch völlig ausreichen und das, was du brauchst.
 
D

Der_AltMann

ah ok alles klar.
Ich habe mehrere Objekte der Klasse XLbusParams. Ich wollte dann zu jedem Objekt auf die dazu gehörenden Werte der Union Klasse zugreifen.
 
Thema: 

Union in einem Struct in JNA

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben