0

基本的に、インターフェイスの実装のみを提供するフレームワークをシミュレートするために、外部でオーバーライドできるクラスを作成することを自分自身に教えています。Hadoopが実際に使用していることに気付きました:

job.setMapperClass(FrameworkObject.class);

これを行うドライバークラスでは、以下のコードを変更してそれを行うのは簡単な変更ですか?

//----- locked framwork interface...
public interface FrameworkInterface {
    public void PrintStuff();
}

//----- locked framwork factory class...
public class FrameworkFactory {

    public static void doStuff(FrameworkInterface fi){
        fi.PrintStuff();
    }
}

//------------ my code that hooks into a framework...
public class FrameworkObject implements FrameworkInterface {

    public FrameworkObject() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void PrintStuff() {
        System.out.println("the implemented method...");
    }
}

//------------ the framework driver I want to change 
public class FrameworkDriver {

    public static void main(String[] args){
        FrameworkFactory.doStuff(new FrameworkObject()); // explicit ref to object
    }
}
4

3 に答える 3

0

組み込みのメカニズムを探している場合は、カスタムサービス プロバイダーがおそらく答えです (Java 1.6 以降で利用可能)。

于 2013-11-12T21:23:41.167 に答える
0

これは、この問題を解決するための簡単なハックです。次に、FrameworkInterface にキャストできる任意のクラスを取得します。これが ajwillia.ms の意味だと思いますか?

public class FrameworkFactory {

public static void doStuff(Class<?> class1) throws Exception{
        FrameworkInterface fi = (FrameworkInterface) class1.newInstance();
        fi.PrintStuff();
}   
}

public class FrameworkDriver {

public static void main(String[] args) throws Exception{
    FrameworkFactory.doStuff(FrameworkObject.class);
}
}
于 2013-11-13T10:22:02.833 に答える