Mała preambuła. Byłem dobrym programistą Java w wersji 1.4 jdk. Po tym przerzuciłem się na inne platformy, ale tutaj przychodzę z problemem, więc pytanie jest zdecydowanie o jdk 1.6 (lub wyżej :)). Mam 3 sprzężoną klasę, charakter sprzężenia związanego z natywnymi metodami. Bellow jest przykładem tego 3 klasyKlasy częściowe java
public interface A
{
public void method();
}
final class AOperations
{
static native method(. . .);
}
public class AImpl implements A
{
@Override
public void method(){
AOperations.method(. . .);
}
}
Więc nie ma interfejsu A, który jest realizowany w sposób natywny przez AOperations i AImpl tylko delegaci metoda wywołanie metod natywnych. Te relacje są generowane automatycznie. Wszystko w porządku, ale mam przed sobą problem. Czasami interfejs taki jak A need expose iterator capability. Mogę wpływać na interfejs, ale nie mogę zmienić implementacji (AImpl).
Mówiąc w języku C# Mogę być w stanie rozwiązać problemu zwykłą częściowej: (# próbka C)
partial class AImpl{
... //here comes auto generated code
}
partial class AImpl{
... //here comes MY implementation of
... //Iterator
}
Więc ma java analog częściowe lub coś podobnego.
EDYTOWANA: Zgodnie z komentarzem @pgras potrzebuję wyjaśnienia. AImpl nie znajduje się w próżni, jest jakaś fabryka (natywnie zaimplementowana), która zwraca instancję AImpl, dlatego tworzenie dziedziczenia z AImpl nie ma zastosowania.
EDYCJI 2: Może to nie dotyczy, ale jak to jest zrobione przez 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' jest metodą statyczną w' Assert'. Pojawi się 'import static org.junit.Assert. *' Lub coś podobnego. Ponieważ wszystko jest statyczne, tak naprawdę nie pomoże. – Chris