[英]java partial classes
小序言。 我是1.4 jdk上的優秀Java開發人員。 之后,我切換到了另一個平台,但是在這里我遇到了問題,因此問題主要是關於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僅將方法調用委托給本機方法。 這些關系是自動生成的。 一切都很好,但我站在問題面前。 有時像A這樣的接口需要公開迭代器功能。 我可以影響界面,但是不能更改實現(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 :也許它不相關,但是JUnit 4是如何完成的:
public class SomeTest {
...
//there is no direct inheritance from Assert, but I can use follow:
assertTrue(1==1); //HOW DOES it works??
Java不支持局部或開放類。 其他JVM語言也可以,但是Java不可以。 在您的示例中,最簡單的事情可能是不幸的是使用委托。 您可以讓AImpl接受另一個對象,這些對象實現這些擴展方法的接口。 然后,生成的AImpl將具有生成的方法(例如迭代器方法),可以將其委托給您傳入的用戶創建的對象。
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$.
文件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 };
}
}
文件Compute $ .java
public abstract class Compute$ {
protected Compute $that;
public Compute$(Compute c){
$that=c;
}
}
文件Compute $ 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;
}
}
文件Compute $ Sub.java
public class Compute$Sub extends Compute$ {
public Compute$Sub(Compute c) {
super(c);
}
public int sub() {
return $that.a - $that.b;
}
}
您可以擴展A(例如,接口B擴展A)並擴展AImpl和實現B(類BImpl擴展AImpl實現B)...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.