java partielle Klassen
Kleine Präambel. Ich war guter java-Entwickler auf jdk 1.4 beschränkt. Nachdem ich es umgestellt haben auf anderen Plattformen, aber hier komme ich mit dem problem also Frage ist stark über die jdk 1.6 (oder höher 🙂 ). Ich habe 3 gekoppelt ist Klasse, die Art der Kopplung befasst sich mit nativen Methoden. Balg ist ein Beispiel für diese 3 Klasse
public interface A
{
public void method();
}
final class AOperations
{
static native method(. . .);
}
public class AImpl implements A
{
@Override
public void method(){
AOperations.method( . . . );
}
}
So gibt es Eine Schnittstelle, die implementiert ist in der nativen Weg von AOperations, und AImpl nur die Delegierten den Aufruf der Methode auf native Methoden.
Diese Beziehungen werden automatisch generiert. Alles ok, aber ich stand vor dem problem. Irgendwann interface wie Ein Bedürfnis aussetzen iterator-Funktion. Kann ich beeinflussen-Schnittstelle, aber nicht ändern können, die Umsetzung (AImpl).
Sagen: in C# ich könnte das problem beheben, indem Sie einfach teilweise:
(C# Beispiel)
partial class AImpl{
... //here comes auto generated code
}
partial class AImpl{
... //here comes MY implementation of
... //Iterator
}
So, hat java Analog der teilweisen oder so ähnlich.
BEARBEITET:
Laut Kommentar von @pgras ich brauche einige Klarstellungen. AImpl ist nicht in Vakuum, gibt es einige factory (native) implementiert, liefert Instanz von AImpl, das ist, warum die Erstellung der Vererbung von AImpl, ist nicht zutreffend.
BEARBEITET 2:
Kann es nicht betreffen, aber, wie es gemacht wird von JUnit 4:
public class SomeTest {
...
//there is no direct inheritance from Assert, but I can use follow:
assertTrue(1==1); //HOW DOES it works??
assertTrue
ist eine statische Methode inAssert
. Es wird eineimport static org.junit.Assert.*
oder dergleichen irgendwo. Wie es ist alles statisch, es wird nicht wirklich helfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java bietet keine Unterstützung für Teilstrecken oder die offenen Klassen. Andere JVM-Sprachen, ist aber nicht Java. In deinem Beispiel ist es das einfachste, kann leider sein, Delegierung verwenden. Sie können Ihre AImpl nehmen Sie ein weiteres Objekt, das erfüllt eine Schnittstelle zur Erweiterung Methoden. Die generierten AImpl würde dann generiert haben Methoden wie die iterator-Methoden, könnte es delegieren an die user erstellt-Objekt übergeben.
Thread(Runnable runnable)
Konstruktor arbeitet.Datei Compute.java
Datei Berechnen$.java
Datei Berechnen$Add.java
Datei Berechnen$Sub.java
Könnte man verlängern (sprich interface B extends A) und erstrecken sich AImpl und umsetzen B (Klasse BImpl erstreckt AImpl implementiert B)...