Was bedeutet das bei IDEA?
Hey Leute,
ich programmiere ja Minecraft Mods. Mir ist gerade aufgefallen, dass man bei IDEA Use Mixins benutzen kann. Ich weiß allerdings nicht, was dass bedeutet. Kann mir, dass einer von euch, bitte erklären?
1 Antwort
Das ist eine Funktion aus dem Minecraft Development-Plugin für IntelliJ IDEA. Es bietet dir expliziten Support zu den Mixins, wie sie vom Mixin-Framework implementiert werden. Das heißt, wenn du solche Mixins nutzt, kann das Programm dir Codevorschläge, Fehlerprüfungen, u.ä. dazu anbieten.
Unter Mixins selbst versteht man einen Mechanismus (bzw. ein Pattern), der es/welches dir erlaubt, bestehenden Code während der Laufzeit zu modifizieren. So könnte man beispielsweise noch nachträglich Klassen um neue Verhaltensweisen erweitern.
In Java würde man so etwas mit Annotationen und Reflection lösen. Das oben erwähnte Mixin-Framework implementiert den Grundmechanismus bereits vor, sodass du nur noch vorgegebene Annotationen benutzen musst.
Bei einer einfachen Klasse wie dieser:
public class Disco {
private List<Person> guests = new ArrayList<>();
public void letIn(Person person) {
guests.add(person);
}
}
könnte eine Erweiterung, die noch eine zusätzliche Prüfung ergänzen soll, in etwa so aussehen:
@Mixin(Disco.class)
public class DiscoMixin {
@Inject(method = "letIn", at = @At("HEAD"), cancellable = true)
public void onLetIn(Person person, CallbackInfo info) {
if (person.getAge() <= 18) {
info.cancel();
}
}
}
Die hier definierte Methode wird vor den Aufruf von letIn aus dem Originalprogramm angehängt. Wenn die Prüfung fehlschlägt (also eine eintrudelnde Person jünger als 18 Jahre ist), wird die letIn-Methode erst gar nicht aufgerufen.
Mixins können zwar ein paar Vorteile liefern (z.B. mehr Flexibilität beim Arbeiten mit externen Programmbibliotheken, modulare Entwicklung), aber bergen ebenso Fehlerrisiken (bspw. Konfliktpotenzial, wenn sich mehrere Mixins aus verschiedenen Programmteilen an die gleichen Methoden hängen oder Codefehler, die sich anders als gewohnt erst zur Laufzeit bemerkbar machen). Umso mehr Mixins man in einem Projekt nutzt, umso schwieriger kann es später werden, bestimmte Programmabläufe noch leicht nachvollziehen zu können.