减少对象/类的实例

时间:2019-01-08 05:07:22

标签: java android kotlin android-edittext singleton

我有一个EditText字段,我想为此检查验证输入。
我应用了MVVM +数据绑定,并在ViewModel中调用onTextChanged()方法
来源:

xml

android:onTextChanged="@{(text, start, before, count) -> viewModel.onMyTextChanged(text)}"

ViewModel.kt

fun onMyTextChanged(text) {
   // Show icon error if invalid, Show icon check done if valid
   val isValid = MyValidation(text).checkValid()
}

MyValidation.kt

class MyValidation(text: String){
  fun checkValid(): Boolean {  
    // Check text here with Regex Pattern
    <-- TODO  -->
    // Check instance time of class
    Log.d("INSTANCE", this.hashCode().toString() )
  }  
}

控制台日志:

INSTANCE : 159625389
INSTANCE : 178364275
INSTANCE : 190324272
...

问题:

在EditText字段中输入文本时,将以执行时间=输入文本的长度来调用onMyTextChanged方法。
因此,MyValidation类的实例也增加了。 (请参阅日志)

我正在考虑使用Object而不是Class来使Singleton静态化。但我感到困惑的是,在这种情况下还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

对于您的用例,您可以使用Kotlin's extension Function来检查文本的有效性,而无需单独的类来检查有效性。扩展功能也将非常方便使用。

将以下代码写在与u检查字符串有效性相同的位置,但不在类主体内。

fun String.isValidString(): Boolean {
 // use this.length etc to refer to current string
 // Check text here with Regex Pattern
    <-- TODO  -->
    // log your String
    Log.d("Your String", this)
}

然后您的代码将如下所示:

fun onMyTextChanged(text) {
   // Show icon error if invalid, Show icon check done if valid
   val isValid = text.isValidString()
}

额外: Reference