java de las clases parciales

Pequeño preámbulo. Yo era buen desarrollador java jdk 1.4. Después de que me he cambiado a otro plataformas, pero aquí vengo con un problema así que la pregunta es fuertemente sobre el jdk 1.6 o superior,:) ). Tengo 3 junto clase, la naturaleza de acoplamiento que se trate con métodos nativos. Abajo es un ejemplo de este 3 de la clase

public interface A
{
     public void method();
}
final class AOperations
{
     static native method(. . .);
}
public class AImpl implements A
{
    @Override
    public void method(){ 
        AOperations.method( . . . );
    }
}

Así que no hay Una interfaz, que se implementa en modo nativo por AOperations, y AImpl sólo los delegados método de llamada a métodos nativos.
Estas relaciones son auto-generados. Todo ok, pero he de pie antes problema. En algún momento de la interfaz como Una necesidad de exponer iterador de la capacidad. Me puede afectar a la interfaz, pero no se puede cambiar la implementación (AImpl).

Diciendo en C# yo podría ser capaz de resolver el problema por parciales simples:
(Ejemplo de C#)

partial class AImpl{
 ... //here comes auto generated code
} 

partial class AImpl{
 ... //here comes MY implementation of 
 ... //Iterator 
} 

Así, ha java analógica de parcial o algo por el estilo.

EDITADO:
De acuerdo con el comentario de @pgras necesito alguna aclaración. AImpl no está en el vacío, hay algunos fábrica (nativo implementado) que devuelve la instancia de AImpl, es por eso que la creación de la herencia de AImpl, no es aplicable.

EDITADO 2:
Puede ser que no tenga que ver, pero cómo se hace mediante 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 es un método estático en Assert. Habrá un import static org.junit.Assert.* o similar en algún lugar. Como todo es estático, esto realmente no ayuda.

OriginalEl autor Dewfy | 2010-03-23

3 Kommentare

  1. 8

    Java no tiene el apoyo de los parciales o de las clases abiertas. Otros JVM idiomas, pero no en Java. En tu ejemplo, la cosa más simple por desgracia puede ser la utilización de la delegación. Usted puede tener su AImpl tomar otro objeto que cumple una interfaz para estos métodos de extensión. El generado AImpl entonces se habría generado métodos como métodos del iterador que se podría delegar en el usuario creado el objeto que se pasa.

    +1: Esta es la forma en la Thread(Runnable runnable) constructor de obras.
    Leggett, ok puede ser que no se relaciona con mi pregunta, pero ¿cómo se puede trabajar la sintaxis de la EDITADO 2
    Como Chris Smith dijo: eso es un método estático, utilizando un estático de importación para un aspecto más local.

    OriginalEl autor Russell Leggett

  2. 2
    How about that: 
    Compute.java  =    your class
    Compute$.java  =   base class for partial classes. Reference a Compute object
    Compute$Add.java = your partial class. Subclass Compute$.
    Compute$Sub.java = your partial class. Subclass Compute$.

    archivo Compute.java

    public class Compute {
        protected int a, b;
        Compute$Add add;
        Compute$Sub sub;
    
        public Compute() {
            add = new Compute$Add(this);
            sub = new Compute$Sub(this);
        }
    
        public int[] doMaths() {
            int radd = add.add();
            int rsub = sub.sub();
            return new int[] { radd, rsub };
        }
    }

    archivo Calcular$.java

    public abstract class Compute$ {
        protected Compute $that;
        public Compute$(Compute c){
            $that=c;
        }
    }

    archivo Calcular$Add.java

    public class Compute$Add extends Compute$ {
        public Compute$Add(Compute c) {
            super(c);
            //TODO Auto-generated constructor stub
        }
    
        public int add(){
            return $that.a+$that.b;
        }
    }

    archivo Calcular$Sub.java

    public class Compute$Sub extends Compute$ {
        public Compute$Sub(Compute c) {
            super(c);
        }
    
        public int sub() {
            return $that.a - $that.b;
        }
    }
    buen intento, es lo que se llama «agregación». En realidad, de la misma manera que yo podía hacer con aspectos que son más intuitivas claro. De todas formas +1

    OriginalEl autor Max Mba

  3. 1

    Se podría extender Un (a decir de la interfaz de B se extiende A) y extender AImpl e implementar B (clase BImpl se extiende AImpl implementa B)…

    gracias, pero «no». He descrito en el EDITAR ¿por qué no es aplicable

    OriginalEl autor pgras

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea