kotlin - 为什么使用 println 不打印字段值?
问题描述
我有以下类定义、实例创建和打印实例的字段:
class Rental (location: String, monthlyRent: Float) {
var location: String = ""
get () = field
set (value) { field = value }
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
println("Hello World")
var myRental = Rental("12341.132,34314", 234.4f)
println("""My rental is! ${myRental.location}""")
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navView: BottomNavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications))
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
}
打印语句仅打印“我的租金是!” 在 Logcat 而不是其余的。如何解决这个问题?
解决方案
您没有location
对构造函数的参数做任何事情。该location
属性正在使用 初始化""
。如果要使用构造函数参数来初始化属性,则需要显式这样做:
class Rental (location: String, monthlyRent: Float) {
var location: String = location // see here
get () = field
set (value) { field = value }
}
旁注:您的自定义get()
和set()
属性的默认行为完全多余,因此可以消除它们。
此外,您可以将构造函数参数也定义为属性,方法是在其前面放置var
或val
,这更简单:
class Rental (var location: String, var monthlyRent: Float) {
}
像这样的简单数据保存类应该被定义为data
类,这样它们会自动toString()
为您方便地生成,以及copy()
如果您需要它。
data class Rental (val location: String, val monthlyRent: Float)
推荐阅读
- java - 在模块中使用接口
- javascript - 使用三元运算符显示状态中的特定项目
- c - 为什么 valgrind 不检测内存泄漏?
- prolog - Prolog中的猜数字游戏
- c++ - c ++中的自定义类数组类型
- git - 如何在 github 上共享 vcpkg 库列表,我尝试导出 nuget 但文件大小很大
- javascript - 无法在智能手机上删除格式化的信用卡号
- firebase - 加载资源失败:使用firebase云功能访问云firestore时服务器响应状态为500()
- c++ - 将 const char* 变量传递给函数
- authentication - Login to PGE website with google App script