Можно ли передать переменные в перечисление? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть класс, который проверяет строки с использованием класса данных «ValidationRequirements» и возвращает сообщение об ошибке Enum, если оно недопустимо.В зависимости от того, какие требования были переданы, перечисление должно скорректировать строку в соответствии с ней.

ValidationRequirements:

data class ValidationRequirements(
        //--------CONFIG_REQUIREMENTS--------
        val PREFIX_STRING: String,
        val REQUIRED_LENGTH: Int,
        val MAXIMUM_LENGTH: Int,
        val REQUIRE_SPECIAL_CHARACTERS: Boolean,
        val REQUIRE_DIGITS: Boolean,
        val REQUIRE_LOWER_CASE: Boolean,
        val REQUIRE_UPPER_CASE: Boolean,
        val REQUIRE_SPACE_SEPARATION: Boolean
)

Enum:

enum class StringStrengthReport(private val errorMessage: String) {
            INVALID_EMAIL_FORMAT("Invalid email format\n"),
            TO_SHORT(" requires at least 6 characters\n"),
            LOWER_CASE_REQUIRED(" requires at least one lower case character\n"),
            UPPER_CASE_REQUIRED(" requires at least one upper case character\n"),
            DIGIT_REQUIRED(" requires at least one numeric character\n"),
            SPECIAL_CHARACTER_REQUIRED(" requires at least one special character (i.e !&?#%)\n"),
            MAX_LENGTH_EXCEEDED(" max length is 32 characters\n"),
            NULL_STRING(TO_SHORT.errorMessage),
            VALID(" is valid!\n");
}

Возможно липередать требования для изменения минимальной / максимальной длины для различных типов строк?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Если вам нужно передать переменные в enum, вам нужен класс данных, а не enum, с моей точки зрения.

0 голосов
/ 22 ноября 2018

Вместо этого используйте закрытый класс:

sealed class StringStrengthReport(private val message: String) {
    override fun toString() = message
}
class InvalidEmailFormat(): StringStrengthReport("Invalid email format") 
class TooShort(val minLength: Int): StringStrengthReport("Requires at least $minLength characters")

Результат:

println(InvalidEmailFormat()) // Invalid email format
println(TooShort(7)) // Requires at least 7 characters
...