2015-04-18 21 views
11

Załóżmy, że mam plik Utils.kt, który będzie zawierał tylko niektóre funkcje narzędzia, bez klas, bez obiektów. Załóżmy, że te funkcje używają jakiegoś wspólnego zestawu stałych wartości.Czy istnieje sposób na zachowanie stałej pliku prywatnego w Kotlin

Więc zrób coś takiego:

package myapp 

private val CONST1 = 1 
private val CONST2 = 2 

public fun function1() {} 
public fun function2() {} 

Niestety Kotlin traktuje prywatną jako "dostępne do całego pakietu". Zatem CONST1 i CONST2 są dostępne dla wszystkich plików, które znajdują się w tym samym pakiecie. Jedynym sposobem ich odizolowania jest przeniesienie tego pliku do osobnej paczki.

Ale co jeśli mam kilka takich plików narzędziowych, każdy z własnym zestawem stałych prywatnych stałych. Wtedy mam tylko dwie opcje: przenieś każdy z nich do unikalnego pakietu lub poddaj się i wszystkie stały z nich są dostępne wszędzie.

Tak czy inaczej, wydaje się, że tworzy się bałagan.

Wszelkie opcje lub porady?

(upd: w rzeczywistości, muszę powiedzieć, że jest to jedna z tych rzeczy, które przeszkadzają mi w Kotlin - nie ma możliwości, aby jakiś byt był lokalny dla pliku (bez użycia niektórych haseł składniowych): jest dostępny albo w całości pakiet lub do wszystkich w ogóle)

UPD: to pytanie jest już nieaktualne (patrz odpowiedź zaakceptowane)

+0

@JaysonMinard autor zaakceptowanej odpowiedzi już zaktualizował ją, aby odzwierciedlić obecny stan rzeczy – dimsuz

+0

Dobrze, a następnie upuściłem drugą Odpowiedź Ponieważ nie jest już potrzebna, –

+0

/* kotlin programowanie */ – voddan

Odpowiedz

6

deklaracje najwyższego poziomu z private widoczności są widoczne tylko w pliku, w którym zostały zadeklarowane.

(oryginalna odpowiedź, ważna w chwili zadawania pytania: Kotlin nie ma pojęcia o zasięgu lokalnym pliku i według mojej najlepszej wiedzy nie planuje go wprowadzić.) (dlaczego?), można utworzyć object enkapsulujące funkcje i prywatne stałe, których używają.

+0

Nie podoba mi się zakres pakietu, ponieważ mam tendencję do posiadania wielu zmiennych lokalnych plików i zagracają wszystkie wyskakujące okienka kończące i ogólnie nie potrzebuję ich widocznych wszędzie. kn ow mogę użyć 'obiektu', ale to wygląda bardziej jak włamanie ... – dimsuz

+0

Cóż, w Kotlin struktura pakietu nie musi odpowiadać strukturze katalogów, więc możesz ustawić odrębny pakiet dla każdego pliku bez zmiany struktura plików w twoim projekcie. – yole

+0

Tak, zauważyłem, że po prostu czuję się nietypowo. Czy to jest zalecany sposób? Właściwie czuję, że trochę buraków jest zdezorientowanych, jak zorganizować mój projekt Kotlin, mając na uwadze wszystkie te rzeczy: domyślny zakres pakietu, dowolna nazwa pakietu na plik. I naprawdę brakuje mi kilku dobrych praktyk lub porad od autorów Kotlin. Java jest tutaj ostrzejsza i wydaje mi się, że to przynosi pewien porządek ... – dimsuz

Powiązane problemy