2017-09-19 3 views
1

私はcalculatorを作成しています。演算子と呼ばれる、その中に4つの主要演算子(+、 - 、*、/)クラスを実装したパッケージがあります; 私は、既知の演算子のマップを含むOperatorsCatalogという別のクラスを持っています;それらのインスタンスをそのコンストラクタで作成し、それらをマップに追加します。 今、別の開発者が独自のnew operator.hを実装したNewOperator.jarファイルを渡す可能性があるのでしょうか。この新しい演算子をマップに追加して、計算時にnew演算子をマップに追加できますか? OperatorsCatalogコードを変更せずにどうすればいいですか? 私はそれをJavaで書いていますjarにあるクラスのインスタンスを作成する方法ライブラリを実行時にライブラリ

+0

新しい演算子がすでにマップに存在していますか? –

+0

質問は良いですが非常に広いですが、インタフェースと反射を潜在的に調べることはできません – nafas

+0

新しい演算子は存在しません.i実行時にメインコードを変更せずに追加したい(operatorsCatalog) – PegahK

答えて

0

superコンストラクタで演算子をサブクラス化して追加しているのでしょうか?私はあなたがクラスパスに新しい演算子クラスを発見できるようにしたくない間違っている場合はOperatorを拡張するもののいずれかのインスタンス化がマップ

public abstract class Operator { 

    protected Operator() { 
     // add to map here 
    } 

    ... 
} 
+0

これは新しい実装はクラスパスで利用できますか? –

+0

それはできません。それは、コード内の任意の場所に演算子をインスタンス化する開発者が必要です – Pelocho

+0

ええ、私はOPがclasspathで利用可能な新しい演算子の自動検出を望んでいると思う。 –

0

に自動的に追加されます。この方法では、この質問を見ています。

Can you find all classes in a package using reflection?

また、あなたは、新しい開発者を& new演算子クラスが書かれるべき方法についての契約上の修正を取得する必要があります。

関連する問題