web-dev-qa-db-fra.com

L'opérateur == ne peut pas être appliqué à 'Long' et 'Int' dans Kotlin

J'essaie d'implémenter des parties de NavigationDrawer de Mike Penz ( https://github.com/mikepenz/MaterialDrawer ) dans Kotlin. Depuis lors, je n'ai rencontré que quelques problèmes, principalement avec les opérateurs. Voici une partie du code pour instancier le tiroir lui-même. Android Studio ne génère aucune erreur, sauf lorsque j'utilise l'opérateur == sur les variables int et 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
        }
    }

Erreurs:

if (drawerItem.identifier == (1)

if (drawerItem.identifier == 2)

Operator == cannot be applied to 'Long and' 'Int'

25
Martin Erlic

Utilisez simplement le long de votre côté droit

if (drawerItem.identifier == 1L)

Edit: la raison pour laquelle cela est nécessaire est que Kotlin ne promeut pas Ints en Longs (ou, plus généralement, n'élargit pas les types); sur le côté gauche, nous avons eu un Long et sur le côté droit, nous avons eu un Int, ce qui a conduit à l'erreur. Indiquant explicitement que le côté droit est un Long corrige l'erreur.

74
Francesc

Par intérêt, une autre solution serait d'utiliser compareTo(). compareTo renvoie zéro si les valeurs sont égales, négative si elle est inférieure à l'autre, ou positive si elle est supérieure à l'autre:

 if(drawerItem.identifier.compareTo(1) == 0)   "Equals"
2
cfl

si vous rencontrez un problème de <opérateur! = non appliqué à long et int> résolvez-le simplement en utilisant long sur votre côté droit, c'est-à-dire la valeur! = 1L c'est tout ..

0
Ranajit Sawant