运算符 == 不能应用于 Kotlin 中的 'Long' 和 'Int'
Operator == cannot be applied to 'Long' and 'Int' in Kotlin
我正在尝试在 Kotlin 中实现 Mike Penz 的 NavigationDrawer (https://github.com/mikepenz/MaterialDrawer) 的一部分。从那以后,我 运行 只处理了几个问题,主要是与运算符有关的问题。这是实例化抽屉本身的代码的一部分。 Android Studio 不会抛出任何错误,除非我在 int 和 Long 变量上使用 == 运算符:
// Create the Drawer
result = DrawerBuilder()
.withSliderBackgroundColor(ContextCompat.getColor(applicationContext, R.color.top_header))
.withActivity(this)
.withToolbar(toolbar)
.withHasStableIds(true)
.withItemAnimator(AlphaCrossFadeAnimator())
.withAccountHeader(headerResult!!)
.addDrawerItems(
PrimaryDrawerItem().withName(R.string.drawer_item_profile).withIcon(FontAwesome.Icon.faw_user).withIdentifier(1).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_create).withIcon(FontAwesome.Icon.faw_paint_brush).withIdentifier(2).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_yaanich_news).withIcon(FontAwesome.Icon.faw_newspaper_o).withIdentifier(3).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_my_groups).withIcon(FontAwesome.Icon.faw_users).withIdentifier(4).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog).withIdentifier(5).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke))
)
.withOnDrawerItemClickListener { view, position, drawerItem ->
if (drawerItem != null) {
var intent: Intent? = null
if (drawerItem.identifier == (1) {
intent = Intent(this, UserProfileActivity::class.java)
} else if (drawerItem.identifier == 2) {
intent = Intent(this, YeetActivity::class.java)
} else if (drawerItem.identifier == 3) {
intent = Intent(this, RssActivity::class.java)
} else if (drawerItem.identifier == 4) {
intent = Intent(this, GroupsActivity::class.java)
} else if (drawerItem.identifier == 5) {
intent = Intent(this, UserSettingsActivity::class.java)
}
if (intent != null) {
this.startActivity(intent)
}
}
false
}
.withSavedInstance(savedInstanceState)
.withShowDrawerOnFirstLaunch(true)
.build()
RecyclerViewCacheUtil<IDrawerItem<*, *>>().withCacheSize(2).apply(result!!.recyclerView, result!!.drawerItems)
if (savedInstanceState == null) {
result!!.setSelection(21, false)
headerResult!!.activeProfile = profile
}
}
错误:
if (drawerItem.identifier == (1)
if (drawerItem.identifier == 2)
Operator == cannot be applied to 'Long and' 'Int'
只需在右侧使用 long
if (drawerItem.identifier == 1L)
编辑:需要这样做的原因是 Kotlin 不会将 Int 提升为 Long(或者,更一般地说,不会扩大类型);在左侧我们有一个 Long,在右侧我们有一个 Int,这会导致错误。明确指出右侧是 Long 修复错误。
如果您面临以下问题
< operator != 不适用于 long 和 int >
解决它只需在右侧使用long
即价值!= 1L
就是这样..
出于兴趣,另一种解决方案是使用 compareTo()
。 compareTo returns 如果值相等则为零,如果小于另一个则为负,如果大于另一个则为正:
if(drawerItem.identifier.compareTo(1) == 0) "Equals"
如果上述解决方案不适合您,
尝试显式将右侧的值转换为左侧
的特定更宽类型
num = 5.7
if (num == 4.toDouble()) {
//some code
}
每个数字类型都支持以下转换:
- toByte(): 字节
- toShort(): 短
- toInt(): Int
- toLong(): 长
- toFloat(): 浮动
- toDouble(): 双
- toChar(): 字符
确保在将 Double 与任何数字(如 myDouble == 5)进行比较时,只有在末尾添加 .0 后它才会生效。这是因为 Kotlin 从输入的数字中猜测类型,它会将 5 视为 int,将 myDouble 视为 double,并会产生相同的错误
所以,总是明确地使比较变量与其他变量相同
drawerItem.identifier == (1.0)
我正在尝试在 Kotlin 中实现 Mike Penz 的 NavigationDrawer (https://github.com/mikepenz/MaterialDrawer) 的一部分。从那以后,我 运行 只处理了几个问题,主要是与运算符有关的问题。这是实例化抽屉本身的代码的一部分。 Android Studio 不会抛出任何错误,除非我在 int 和 Long 变量上使用 == 运算符:
// Create the Drawer
result = DrawerBuilder()
.withSliderBackgroundColor(ContextCompat.getColor(applicationContext, R.color.top_header))
.withActivity(this)
.withToolbar(toolbar)
.withHasStableIds(true)
.withItemAnimator(AlphaCrossFadeAnimator())
.withAccountHeader(headerResult!!)
.addDrawerItems(
PrimaryDrawerItem().withName(R.string.drawer_item_profile).withIcon(FontAwesome.Icon.faw_user).withIdentifier(1).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_create).withIcon(FontAwesome.Icon.faw_paint_brush).withIdentifier(2).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_yaanich_news).withIcon(FontAwesome.Icon.faw_newspaper_o).withIdentifier(3).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_my_groups).withIcon(FontAwesome.Icon.faw_users).withIdentifier(4).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke)),
PrimaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog).withIdentifier(5).withSelectable(false).withIconColor(ContextCompat.getColor(applicationContext, R.color.icon_grey)).withTextColor(ContextCompat.getColor(applicationContext, R.color.stroke))
)
.withOnDrawerItemClickListener { view, position, drawerItem ->
if (drawerItem != null) {
var intent: Intent? = null
if (drawerItem.identifier == (1) {
intent = Intent(this, UserProfileActivity::class.java)
} else if (drawerItem.identifier == 2) {
intent = Intent(this, YeetActivity::class.java)
} else if (drawerItem.identifier == 3) {
intent = Intent(this, RssActivity::class.java)
} else if (drawerItem.identifier == 4) {
intent = Intent(this, GroupsActivity::class.java)
} else if (drawerItem.identifier == 5) {
intent = Intent(this, UserSettingsActivity::class.java)
}
if (intent != null) {
this.startActivity(intent)
}
}
false
}
.withSavedInstance(savedInstanceState)
.withShowDrawerOnFirstLaunch(true)
.build()
RecyclerViewCacheUtil<IDrawerItem<*, *>>().withCacheSize(2).apply(result!!.recyclerView, result!!.drawerItems)
if (savedInstanceState == null) {
result!!.setSelection(21, false)
headerResult!!.activeProfile = profile
}
}
错误:
if (drawerItem.identifier == (1)
if (drawerItem.identifier == 2)
Operator == cannot be applied to 'Long and' 'Int'
只需在右侧使用 long
if (drawerItem.identifier == 1L)
编辑:需要这样做的原因是 Kotlin 不会将 Int 提升为 Long(或者,更一般地说,不会扩大类型);在左侧我们有一个 Long,在右侧我们有一个 Int,这会导致错误。明确指出右侧是 Long 修复错误。
如果您面临以下问题 < operator != 不适用于 long 和 int > 解决它只需在右侧使用long 即价值!= 1L 就是这样..
出于兴趣,另一种解决方案是使用 compareTo()
。 compareTo returns 如果值相等则为零,如果小于另一个则为负,如果大于另一个则为正:
if(drawerItem.identifier.compareTo(1) == 0) "Equals"
如果上述解决方案不适合您, 尝试显式将右侧的值转换为左侧
的特定更宽类型num = 5.7
if (num == 4.toDouble()) {
//some code
}
每个数字类型都支持以下转换:
- toByte(): 字节
- toShort(): 短
- toInt(): Int
- toLong(): 长
- toFloat(): 浮动
- toDouble(): 双
- toChar(): 字符
确保在将 Double 与任何数字(如 myDouble == 5)进行比较时,只有在末尾添加 .0 后它才会生效。这是因为 Kotlin 从输入的数字中猜测类型,它会将 5 视为 int,将 myDouble 视为 double,并会产生相同的错误
所以,总是明确地使比较变量与其他变量相同
drawerItem.identifier == (1.0)