Comment interpréter et traduire le code Kotlin en Java?


Woppi:

J'ai essayé de traduire ce code Kotlin en Java depuis que le projet est en Java. Je traduis en examinant la syntaxe Kotlin. Cependant, il y en a encore d'autres que j'ai du mal à comprendre.

https://github.com/airbnb/lottie-android/blob/master/LottieSample/src/main/kotlin/com/airbnb/lottie/samples/AppIntroActivity.kt

Plus précisément:

private val animationView: LottieAnimationView by lazy {
    rootView.inflate(R.layout.app_intro_animation_view, false) as LottieAnimationView
}

private val viewPager: LockableViewPager by lazy {
    findViewById<LockableViewPager>(R.id.intro_activity_viewPager)
}

override fun generateFinalButtonBehaviour(): IntroButton.Behaviour {
    return object : IntroButton.Behaviour {
        override fun setActivity(activity: IntroActivity) { finish() }
        override fun getActivity(): IntroActivity? = null
        override fun run() {}
    }
}

private fun setViewPagerScroller() {
    try {
        val scrollerField = ViewPager::class.java.getDeclaredField("mScroller")
        scrollerField.isAccessible = true
        val interpolator = ViewPager::class.java.getDeclaredField("sInterpolator")
        interpolator.isAccessible = true

        val scroller = object : Scroller(this, interpolator.get(null) as Interpolator) {
            override fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int, duration: Int) {
                super.startScroll(startX, startY, dx, dy, duration * 7)
            }
        }
        scrollerField.set(viewPager, scroller)
    } catch (e: NoSuchFieldException) {
        // Do nothing.
    } catch (e: IllegalAccessException) {
        // Do nothing.
    }
}

Pour le setViewPagerScroller, j'ai pu traduire la première partie.

Field scrollerField = ViewPager.class.getDeclaredField("mScroller");
scrollerField.setAccessible(true);

Field interpolator = ViewPager.class.getDeclaredField("sInterpolator");
interpolator.setAccessible(true);
Adam:

La méthode setViewPagerScroller utilise la syntaxe de classe interne anonyme de kotlin . C'est la partie «objet» qui n'a pas d'équivalent réel dans la syntaxe Java.

private void setViewPagerScroller() {
    try {
        Field scrollerField = ViewPager.class.getDeclaredField("mScroller");
        scrollerField.setAccessible(true);

        Field interpolator = ViewPager.class.getDeclaredField("sInterpolator");
        interpolator.setAccessible(true);

        Scroller scroller = new Scroller(this, (android.view.animation.Interpolator) interpolator.get(null)){

            @Override
            public void startScroll(int startX, int startY, int dx, int dy, int duration) {
                super.startScroll(startX, startY, dx, dy, duration * 7);
            }
        }

        scrollerField.set(viewPager, scroller);
    } catch (NoSuchFieldException error) {
        // Do nothing.
    } catch (IllegalAccessException error) {
        // Do nothing.
    }
}

Et le asmot-clé est comme un casting en java. J'espère que vous pouvez l'utiliser pour traduire fun generateFinalButtonBehaviour(), il contient plus de la même chose.

La construction Lazy devient sans surprise plus verbeuse en java. Vous devez utiliser la discipline pour ne pas accéder à la visionneuse à tort si vous choisissez de suivre la structure ci-dessous.

private LockableViewPager viewPager;

private LockableViewPager getViewPager(){
    if(viewPager == null){
        // produce viewpager and store in field
    }
    return viewPager;
}  

Vous pouvez également utiliser une classe pour représenter plus précisément une initialisation différée de vos champs. (Pour que vous ne puissiez pas accéder par erreur à un champ que vous vouliez initialiser paresseusement) Cela devient encore plus détaillé mais pourrait en valoir la peine.

Articles connexes


Comment interpréter / *** / en java?

Muthu Ganapathy Nathan: Que suis-je en train de faire? Je construis maintenant un ségrégateur de commentaires dans le cadre de mon stimulateur IDE simple (qui détectera tous les commentaires dans le code java). En cela ma tâche est de noter toutes les position

Meilleur moyen de traduire ce code java en kotlin

Igor Wojda URL url = new URL(urlSpec); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); InputStream in = connection.getInputStream(); int bytesRead = 0; byte[] buffer = new byte[1024]; while ((bytesRead = in.read(buffer)) > 0) { out.

Comment traduire ce code java en organigramme

Arnold de guzman J'ai mes devoirs mais j'ai du mal à comprendre ce code car il est nouveau pour moi, il s'appelle Instruction de rupture étiquetée, j'ai du mal à traduire le code en organigramme Code: 1. class LabeledBreak { 2. public static void main(String[]

Traduire le code POSTMAN en Java

noman404 J'essaie d'implémenter (en java) l'aperçu POSTMAN de la demande POST. il utilise les limites et la disposition du contenu, je ne suis pas tellement familier avec l'implémentation des limites et de la disposition du contenu en java. Je pense que les ex

Traduire le code Kotlin en Java - Comprendre la syntaxe

ProjH Je cherche à nous essayer ce morceau de code qui, grâce à la lecture d'Azimut passe à l'opposé lorsque l'utilisateur tient le téléphone en position verticale. Je dois utiliser ce code pour expérimenter en Java, mais je ne sais pas comment traduire le cod

Comment traduire le code Morse en anglais en C++ ?

lame J'essaie actuellement de trouver un moyen de créer une fonction pour traduire le code morse en anglais. Voici mon code (REMARQUE : PAS LE CODE ENTIER) int main() { string const morseCode[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "...."

Comment traduire le code assembleur en code C ?

Taha Yasin Erel Je suis très nouveau dans l'assemblage et j'ai du mal à traduire les codes entre eux. Quelqu'un peut-il m'aider à atteindre la réponse? sumAndProd(int, int): pushq %rbp movq %rsp, %rbp movl %edi, -20(%rbp) movl %esi,