2016-02-22 11 views
6

Ich schreibe ein Programm, in dem ich das Fabrikmuster verwende. Ich habe eine Schnittstelle namens AssetFundCalculator und eine Klasse mit dem Namen AssetFundCalculatorImpl, die die Schnittstelle implementiert.Paket gleichwertige Sichtbarkeitsmodifikator in Kotlin

Die AssetFundValidator Klasse überprüft, einige Eingaben, und ist in der Lage eine gültige AssetFundCalculatorImpl zu instanziiert.

Ich möchte, wenn der Rest des Programms nur über die Schnittstelle und nicht über den AssetFundCalculatorImpl, so dass nur die AssetFundValidator es könnte instanziiert wissen würde.

Meine Paketstruktur wird wie folgt aussehen:

enter image description here

In Java würde ich Paket Sichtbarkeitsmodifizierer zur AssetFundCalculatorImpl Klasse geben, oder es ist Konstruktor, und es würde das Problem lösen, aber in Kotlin, es gibt keinen Paketsichtbarkeitsmodifikator.

Gibt es dafür eine Lösung? Ich möchte diesen Code nicht in ein separat kompiliertes Modul einfügen, daher wird der interne Modifikator nicht funktionieren.

Antwort

4

Sie können AssetFundValidator und AssetFundCalculatorImpl in dieselbe Datei eingeben und AssetFundCalculatorImpl als private markieren. In diesem Fall ist es nur für den Code in der gleichen Datei zugänglich, einschließlich AssertFundValidator, aber nicht für Code in anderen Teilen des Programms.

+0

Nicht sehr sauber, aber zumindest funktioniert es. – LordScone

+2

Immerhin habe ich diese Lösung nicht verwendet, ich mag es wirklich nicht zwei Klassen in eine Datei zu setzen. Was war der Grund dafür, dass der Paketmodifikator aus der Sprache weggelassen wurde? – LordScone

+0

Sie sollten sich daran gewöhnen, mehrere Klassen in eine Datei zu legen, ein sehr häufiges Muster in Kotlin. Wir haben die Sichtbarkeit des Pakets nicht berücksichtigt, da dies keine gute Möglichkeit ist, etwas zu verbergen: Ein Benutzer eines Moduls kann Klassen in demselben Paket erstellen, das das Modul verwendet, und erhält somit Zugriff auf paketlokale Teile dieses Moduls. – yole