尝试添加更多详细信息,此答案可能对某人有所帮助。
是的,我们可以向final
诸如String
. 例如,我想添加一种方法,String
该方法会告诉我是否String
有有效的密码字符数。
所以我要做的是,我必须创建一个下面的函数,它可以写在相同class
或不同的单独class
文件中。
fun String.hasValidPassword() : Boolean {
// Even no need to send string from outside, use 'this' for reference of a String
return !TextUtils.isEmpty(this) && this.length > 6
}
现在从任何地方打电话
val isValid : Boolean = password.haveValidLength()
建议
如果您的应用程序只有一个密码验证,那么没有问题。
hasValidPassword
但是,如果应用程序有多个验证,我不建议您编写这样的扩展方法。由于扩展方法是satically,因此您无法hasValidPassword
在运行时更改。所以如果你想在运行时改变验证,你应该使用一个函数,例如:
class PasswordRepository(private val validate:(String)->Boolean){
fun save(value:String){
if(validate(value)){
//TODO persist the password
}
}
}
val permitAll = PasswordRepository {true}
val denyAll = PasswordRepository {false}
permitAll.save("it will be persisted")
denyAll.save("it will not be persisted")
换句话说,上面的扩展方法违反了单一职责原则,它进行了验证和字符串操作。