4

こんにちは、私は大学の 4 年生で、初めての本格的な就職の機会があります (わくわくします)。私は今、彼らがプログラミング例を見る必要がある段階にあり、2 つの異なる実装 (1 つは組み込みのものを使用し、もう 1 つは私が選択したもの) を使用して、Java で乱数ジェネレーター サービスを実装するタスクを与えられました。 . コードは簡単な部分ですが、タスクの一部が私を混乱させています...ここにあります:

評価者として、私は次のことができるはずです: 候補の jar ファイルを使用して自分のプロジェクトをコンパイルします。私のソリューションを候補の実行可能 jar に登録します。候補の実行可能 jar を実行し、何らかの方法で実装を実行するように指示します。

基本的に、コードを実行可能な .jar にしています。

評価者は、候補者が開発したコードとコンパイルされたクラスを使用して、候補者のコードを再コンパイルすることなく、独自の乱数ジェネレーターの実装をプラグインできる必要があります。

それはどういう意味ですか?多分私は明らかな何かを見逃していますか?すべてを再コンパイルすることなく、彼らが独自の実装を投入できるようにする方法がわかりません...私の大学でそのようなことを聞​​いたことがないので(私は思う)、それほど大きな仕事ではないことを願っています.

どんな助け/洞察も本当に感謝しています!

4

5 に答える 5

10

これは、エバリュエーターが実装できるパブリック API の一部として RandomNumberGenerationStrategy インターフェイスを提供する必要があることを意味しているだけだと思います。

次に、別のフックを提供して、インターフェイスの特定の実装を登録できるようにします。これをコールバック経由で呼び出します。

于 2010-03-03T16:13:26.400 に答える
5

彼らは、実装 JAR をロードしてURLClassLoader( docs を参照)、リフレクションを使用してメイン クラスをインスタンス化し、正しいメソッドを呼び出して乱数ジェネレーターを呼び出すことを望んでいます。

于 2010-03-03T16:13:19.683 に答える
1

Springを使用し、 ClassPathXmlApplicationContextを活用して、Spring構成を介して実装を交換します。Springの構成は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
    <bean id="randonNumberGenerator"  class="com.me.MyGenerator"/>

    <!--
    <bean id="randonNumberGenerator"  class="com.someoneelse.ADifferentGenerator"/>
    -->
</beans>

プログラムで、Springコンテキストをロードし、Beanを検索します。

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
IGenerator generator = applicationContext.getBean("randonNumberGenerator");

// IGenerator in the interface which MyGenerator and ADifferentGenerator implement

Spring構成ファイルは(jar内だけでなく)クラスパスに存在する必要があるため、再コンパイルせずに実行時に変更できることを忘れないでください。

于 2010-03-03T16:44:04.627 に答える
0

おそらく、これをできるだけ簡単にするために、クラスの名前と、実装する必要があるメソッドのプロトタイプを提供していませんか? これは、これに対する最も論理的で簡単な方法の 1 つだと思います...たとえば、学校の教授が私たちに課題を与え、彼が提供したドライバー クラスでプログラムを実行できるようにする必要がある場合、彼は通常、名前を設定します。メソッドのプロトタイプと一緒に実装する必要があるクラスの...ちょっと考えただけ...

于 2010-03-03T17:17:39.360 に答える
0

Eclipseが使用するOSGi フレームワークを見てください。例として、Eclipse は新しいプラグインをロードし、それらを実行中の環境に積極的に挿入して、すぐに使用できるようにします (再起動せずに適用します)。まったく同じことができます。

于 2010-03-03T16:47:00.190 に答える