Java частичные классы

Маленькая преамбула. Я был хорошим Java-разработчиком на 1.4 jdk. После него я переключил на другого платформы, но здесь я иду с проблемой, таким образом, вопрос сильно о jdk 1.6 (или выше :)). У меня есть 3 связанных класса, природа связи, касавшейся собственных методов. Рев является примером этих 3 классов

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

Таким образом, существует интерфейс A, который реализован собственным способом AOperations и AImpl просто вызов метода делегата к собственным методам. Эти отношения автоматически генерируются. Все хорошо, но я имею, стоят перед проблемой. Интерфейс Sometime как потребность выставляет возможность итератора. Я могу влиять на интерфейс, но не могу изменить реализацию (AImpl).

При высказывании в C# я мог смочь проблема твердости неравнодушным простым: (Образец C#)

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

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

Так, имеет аналог Java частичных или чего-то как.

ОТРЕДАКТИРОВАННЫЙ: Согласно комментарию @pgras мне нужно некоторое разъяснение. AImpl не находится в вакууме, существует некоторая фабрика (реализованный собственный компонент), который возвращает экземпляр AImpl, именно поэтому создание наследования от AImpl, не применимо.

ОТРЕДАКТИРОВАННЫЙ 2: May быть этим не имеет отношение, но как это сделано JUnit 4:

public class SomeTest {
 ...
 //there is no direct inheritance from Assert, but I can use follow:
 assertTrue(1==1); //HOW DOES it works??
7
задан Dewfy 23 March 2010 в 16:50
поделиться

2 ответа

Java не поддерживает частичные или открытые классы. Другие языки JVM работают, но не Java. В вашем примере, к сожалению, самым простым может быть использование делегирования. Вы можете заставить свой AImpl взять другой объект, который выполняет интерфейс для этих методов расширения. Сгенерированный AImpl затем сгенерировал бы такие методы, как методы итератора, которые он мог бы делегировать создаваемому пользователем объекту, который вы передаете.

8
ответ дан 6 December 2019 в 23:04
поделиться

Вы можете расширить A (скажем, интерфейс B расширяет A) и расширить AImpl и реализовать B (class BImpl extends AImpl implements B)...

1
ответ дан 6 December 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: