0

Java クラスに実装されていない関数の階層を作成しました。既に実装されている関数を考慮して、実装できる関数を追跡したいと考えています。

例として、実装されていない関数の依存関係の長いチェーンを次に示します。これをプログラムで分析して、どの関数を実装できるかを判断します (既に実装されている関数がある場合)。

//requires the functions b and c
public static void a(){

}

//does not require any functions to be implemented before being implemented
public static void b(){

}

//requires the function b
public static void c(){

}

public static void d(){ //requires the function a

}

public static void e(){ //requires the function a and c

}

public static void f(){ //requires the function a and c

}

//requires the functions a and f
public static void g(){

}

上記の関数のどれをここで実装できるかを判断する方法はありますか (既に実装されている関数のリストが与えられた場合)。Javascript では、この問題を解決するのは簡単ですが (関数のプロトタイプで各関数のプロパティを設定できるため)、Java では、単純で簡潔な解決策をまだ見つけていません。

4

2 に答える 2

0

あなたの例では、ボディが空の場合でも、すべてのメソッドに実装があります。実装せずにメソッドを検出するには、メソッドを抽象化する必要があり (クラスも抽象化されます)、再帰コードを記述する必要があります。各メソッド内のコードを調べたい場合は、そのスタック トレースを処理できます。ここを見てください:スタックトレースまたはリフレクションを使用してメソッドの呼び出し元を見つけるにはどうすればよいですか?

于 2012-09-03T18:54:27.077 に答える
0

インターフェイスのアイデアは、あなたがしていることに完全に適しているようです。aを介して関数を追跡するインターフェイスの階層を次に示しますd

interface HasA extends HasB, HasC {
    public static void a();
}

interface HasB {
    public static void b();
}

interface HasC extends HasB {
    public static void c();
}


interface HasD extends HasA {
    public static void d();
}

HasA(たとえば)を実装するクラスは、メソッドab、および を定義しない限りコンパイルされませんc

于 2012-09-03T19:03:11.323 に答える