Java Typ?Frage bezüglich richtiger Interface Implementierung

Abend Leute,
es sind Semesterferien und wir haben eine Bonusaufgabe bekommen ,die nicht für die Zulassung notwendig ist.Um nicht aus der Übung zu kommen dachte ich mir ,dass ich sie mal machen könnte.Nun die Aufgabe ist relativ banal in deren Verlauf man folgendes Implementierung soll:

Definieren Sie ein Interface “Einheit”,welches – wie alle Interfaces dieser Aufgabe – keine Methoden enthält. Definieren Sie nun die Interfaces
Meter und Sekunden,welche Einheit erweitern. Definieren Sie außerdem die Interfaces Multiplikation und Division ,welche jeweils zwei generische Typ-Parameter bekommen, die Einheit erweitern. Multiplikationen und Divisionen von Einheiten sind ebenfalls Einheiten. Nun können Siedie in dieser Aufgabe benötigten Einheiten als Java Typen darstellen.


Einheit  Bedeutung        Java Typ
m        Strecke          Meter
s        Dauer            Sekunden
m/s      Geschwindigkeit  Division<Meter,Sekunde>
m/s2     Beschleunigung   Division<Meter,Multiplikation<Sekunde,Sekunde>>

Da es keine Klassen gibt, die diese Interfaces implementieren (und somit auch keine

entsprechenden Objekte), nennt man solche Typen auch Phantom Types.

Folgendes habe ich bisher implementier:

interface Einheit{
   }
interface Meter extends Einheit{
    public String einheit = "m";
    public String bedeutung = "Strecke";
}
interface Sekunden extends Einheit{
    public String einheit = "s";
    public String bedeutung = "Zeit";
}
interface Multiplikation<A,B> extends Einheit{
    
}
interface Division<A,B> extends Einheit{
    
}

Was ich mich nun frage sind drei Dinge:
Der Satz “Multiplikationen und Divisionen von Einheiten sind ebenfalls Einheiten” . Wie ist das zu verstehen bzw zu implementieren ?
Was denkt ihr ist mit Java Typen gemeint ? Etwas sowas wie Primitives wie String …?
Wie soll ich diese Tabelle mit Einheit,Bedeutung und JavaTyp implementieren?
Ich habe mich schon dran versuchte siehe Interface Meter,da hab ich schon was reingepackt.

Hat einer ne Idee?

Definieren Sie außerdem die Interfaces Multiplikation und Division ,welche jeweils zwei generische Typ-Parameter bekommen, die Einheit erweitern.

und

m/s Geschwindigkeit Division<Meter,Sekunde>

passt doch nicht ganz zu dieser Lösung.

interface Division<A,B> extends Einheit {}

da laut Aufgabe

Division<Meter, Integer>

nicht erlaubt sein soll. Ein Stichwort wäre Wildcards.

interface Division<? extends Einheit, ? extends Einheit> extends Einheit {}

Probiere das ganze doch aus und schau dir die Fehlermeldungen an.

So, wie du es schon geschrieben hast:
interface Division<A,B> extends Einheit

Was denkt ihr ist mit Java Typen gemeint ? Etwas sowas wie Primitives wie String …?

Wohl nur, dass es eben diese Klassen („Java-Typen“) namens „Meter“ usw. geben soll…

Wie soll ich diese Tabelle mit Einheit,Bedeutung und JavaTyp implementieren?
Ich habe mich schon dran versuchte siehe Interface Meter,da hab ich schon was reingepackt.

Das ist eine gute Frage. Da steht IMHO nichts explizites dazu dabei. Sow, wie es im Moment ist, macht das nicht viel Sinn: Fields („Variablen“) sind nicht Polymorph. Wenn man sowas hat wie

Einheit e = gibMirEineEinheit();

Dann kann man NICHT mit

String bedeutung = e.bedeutung;

die Bedeutung abrufen - denn ‚bedeutung‘ gibt es in ‚Einheit‘ nicht (nur in „Meter“ und „Sekunden“). Man könnte zwar sowas machen wie

interface Einheit {
    String getName();
    String getBedeutung();
}

class MeterImplementierung implements Meter {
    @Override
    public String getBedeutung() { return "Strecke"; }
...
}

aber das is eben explizit NICHT gewünschti (die Einheiten sollen ja keine Methoden haben).

Also, die Tabelle scheint (IMHO!) erstmal keine konkreten Auswirkungen auf die Implemementierung selbst haben zu sollen, sondern soll wohl nur als Beispiel dienen…

EDIT: BTW, es gibt da auch http://www.unitsofmeasurement.org/ von http://jscience.org/ : Das ist sowas ähnliches, nur eben etwas ausgefeilter :wink: