Pequeño preámbulo. Yo era un buen desarrollador de Java en 1.4 jdk. Después de esto, he cambiado a otras plataformas, pero aquí tengo un problema, por lo que la pregunta es fuertemente sobre jdk 1.6 (o superior :)). Tengo 3 clases acopladas, la naturaleza del acoplamiento relacionado con los métodos nativos. Abajo es un ejemplo de esta clase 3clases parciales de Java
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 hay una interfaz, que se implementa en forma nativa por AOperations, y sólo AImpl delegados método de llamada a los métodos nativos. Estas relaciones se generan automáticamente. Todo está bien, pero tengo un problema antes. En algún momento, la interfaz como A necesita exponer la capacidad del iterador. Puedo afectar la interfaz, pero no puedo cambiar la implementación (AImpl).
Decir en C# que podría ser capaz de resolver un problema por simple parcial: (C# muestra)
partial class AImpl{
... //here comes auto generated code
}
partial class AImpl{
... //here comes MY implementation of
... //Iterator
}
Por lo tanto, tiene analógica Java del parcial o algo así.
EDITADO: Según el comentario de @pgras, necesito algunas aclaraciones. AImpl no está en el vacío, hay alguna fábrica (implementada nativamente) que devuelve la instancia de AImpl, por eso la creación de herencia de AImpl no es aplicable.
Editado 2: Puede ser que no se refiere, pero la forma en que se realiza por 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 alguna parte. Como todo es estático, no será de gran ayuda. – Chris