Skip to content

Commit

Permalink
asFeld(..) mit ByteAdresse als Parameter versehen
Browse files Browse the repository at this point in the history
  • Loading branch information
Oli B committed Jan 8, 2024
1 parent bd2576e commit d6a698d
Showing 1 changed file with 20 additions and 7 deletions.
27 changes: 20 additions & 7 deletions lib/src/main/java/gdv/xport/feld/Datentyp.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2014 by Oli B.
* Copyright (c) 2014-2024 by Oli B.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -86,15 +86,29 @@ public Class<? extends Feld> asClass() {
* @param anzahlBytes die Anzahl an Bytes
* @param byteAddress die Byte-Adresse
* @return z.B. ein {@link NumFeld}-Objekt
* @deprecated bitte entsprechende Methode mit ByteAdresse verwenden
* (TODO: wird mit v9 entsorgt)
*/
@Deprecated
public Feld asFeld(final Bezeichner bezeichner, final int anzahlBytes, final int byteAddress) {
return asFeld(bezeichner, anzahlBytes, ByteAdresse.of(byteAddress));
}

/**
* Liefert den Datentyp als Feld zurueck.
*
* @param bezeichner der Bezeichner
* @param anzahlBytes die Anzahl an Bytes
* @param byteAddress die Byte-Adresse
* @return z.B. ein {@link NumFeld}-Objekt
* @since 7.1 (08-Jan-2024)
*/
public Feld asFeld(final Bezeichner bezeichner, final int anzahlBytes, final ByteAdresse byteAddress) {
Class<? extends Feld> clazz = this.asClass();
try {
Constructor<? extends Feld> ctor = getConstructor(clazz);
return ctor.newInstance(bezeichner, anzahlBytes, byteAddress);
} catch (SecurityException ex) {
throw new ShitHappenedException("cannot instantiate " + clazz, ex);
} catch (InstantiationException ex) {
return ctor.newInstance(bezeichner, anzahlBytes, byteAddress.intValue());
} catch (SecurityException | InstantiationException ex) {
throw new ShitHappenedException("cannot instantiate " + clazz, ex);
} catch (IllegalAccessException ex) {
throw new ShitHappenedException("cannot access constructor of " + clazz, ex);
Expand All @@ -105,8 +119,7 @@ public Feld asFeld(final Bezeichner bezeichner, final int anzahlBytes, final int

private Constructor<? extends Feld> getConstructor(Class<? extends Feld> clazz) {
try {
Constructor<? extends Feld> ctor = clazz.getConstructor(Bezeichner.class, int.class, int.class);
return ctor;
return clazz.getConstructor(Bezeichner.class, int.class, int.class);
} catch (NoSuchMethodException ex) {
LOG.debug("{} hat keinen public Constructor ({}).", clazz, ex.getMessage());
LOG.trace("Details:", ex);
Expand Down

0 comments on commit d6a698d

Please sign in to comment.