2015-04-18 4 views
11

Предположим, у меня есть файл Utils.kt, который будет содержать только некоторые служебные функции, классы, объекты. И предположим, что эти функции используют некоторый общий набор постоянных значений.Есть ли способ иметь постоянную постоянную файла в Kotlin

Так что я сделать что-то вроде этого:

package myapp 

private val CONST1 = 1 
private val CONST2 = 2 

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

К сожалению Котлин лечит частный как «доступен для всего пакета». Таким образом, CONST1 и CONST2 доступны для всех файлов, находящихся в одном пакете. Единственный способ изолировать их - переместить этот файл в отдельный пакет.

Но что, если у меня есть несколько служебных файлов, подобных этому, каждый со своим набором private константы. Тогда у меня есть только два варианта: переместите каждый из них в уникальный пакет или сдадитесь, и у вас есть константы из всех доступных для всех.

В любом случае, кажется, создается беспорядок.

Любые варианты или рекомендации?

(UPD: на самом деле, я должен сказать, что это одна из тех редких вещей, которые беспокоят меня в Котлин - не способ сделать некоторые объект быть файл-местный (без использования некоторых синтаксических хаки): это либо доступно всем пакет или всем на всех)

UPD: Этот вопрос является устаревшим (см принятый ответ)

+0

@JaysonMinard автор принятого ответа уже обновил его, чтобы отразить текущее состояние вещей – dimsuz

+0

Хорошо, тогда я уронил другую ответ, так как он больше не нужен. –

+0

/* kotlin programming */ – voddan

ответ

6

декларации на высшем уровне с private видимости видны только в файле, где они объявлены.

(оригинал ответа, действительный, когда был задан вопрос: у Kotlin нет понятия локальности файла-файла, и, насколько мне известно, его не планируется внедрять. Если вам не нравится область пакета (почему?), вы можете создать object, инкапсулируя функции и частные константы, которые они используют.

+0

Мне не нравится область пакета, потому что я имею тенденцию иметь много локальных переменных файлов, и они загромождают все всплывающие окна завершения, и вообще я не нуждаюсь в них везде. кп ow Я могу использовать 'object', но это больше похоже на hack ... – dimsuz

+0

Ну, в Kotlin структура пакета не должна соответствовать структуре каталогов, поэтому вы можете установить отдельный пакет для каждого файла без изменения структура файлов в вашем проекте. – yole

+0

Да, заметил, что это просто необычно. Это рекомендуемый способ? На самом деле, я чувствую, что небольшая свекла дезориентирована на то, как организовать проект Kotlin с учетом всего этого: площадь пакета по умолчанию, произвольное имя пакета для каждого файла. И я действительно скучаю по некоторым рекомендациям или советам авторов Котлина. Java здесь более строгая, и мне кажется, что это приносит некоторый заказ ... – dimsuz