2016-02-22 26 views
6

私は工場パターンを使用しているプログラムを書いています。私は、というAssetFundCalculatorというインターフェイスと、このインターフェイスを実装するAssetFundCalculatorImplというクラスを持っています。Kotlinのパッケージに相当する可視性修飾子

AssetFundValidatorクラスには、いくつかの入力を検証し、有効なAssetFundCalculatorImplをインスタンス化することができます。

のみAssetFundValidatorがそれをインスタンス化することができるようにプログラムの残りの部分だけで、インターフェースについて、そしてないAssetFundCalculatorImplについて知っているだろう場合、私はしたいと思います。

私のパッケージ構造は次のように探しています:Javaでは

enter image description here

、私はAssetFundCalculatorImplクラス、またはそれのコンストラクタにパッケージの可視性修飾子を与えるだろう、それは問題を解決するだろうが、中Kotlinには、パッケージ可視性修飾子はありません。

これに対する解決策はありますか? このコードを個別にコンパイルされたモジュールに入れたくないので、内部修飾子は機能しません。

答えて

4

AssetFundValidatorAssetFundCalculatorImplを同じファイルに入れ、AssetFundCalculatorImplprivateとマークすることができます。その場合、同じファイル内のコード(AssertFundValidatorを含む)にしかアクセスできませんが、プログラムの他の部分のコードにはアクセスできません。

+0

きれいではありませんが、少なくとも機能しています。 – LordScone

+2

私はこのソリューションを使用していませんでしたが、実際には2つのクラスを1つのファイルに入れるのは嫌です。パッケージ修飾子をその言語から除外した理由は何ですか? – LordScone

+0

あなたは1つのファイルに複数のクラスを入れることに慣れるべきです。それはKotlinの非常に一般的なパターンです。パッケージのローカル可視性は含まれていませんでした。なぜなら、モジュールのユーザーはモジュールが使用するパッケージと同じパッケージにクラスを作成し、そのモジュールのパッケージローカル部分にアクセスできるからです。 – yole

関連する問題