¿Cómo interpretar y traducir el código de kotlin a java?

He intentado traducir este código de Kotlin a Java porque el proyecto está en Java. Estoy traduciendo al analizar la syntax de Kotlin. Sin embargo, hay otros que me cuesta entender.

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

Específicamente:

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.getDeclanetworkingField("mScroller") scrollerField.isAccessible = true val interpolator = ViewPager::class.java.getDeclanetworkingField("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. } } 

Para setViewPagerScroller , pude traducir la primera parte.

 Field scrollerField = ViewPager.class.getDeclanetworkingField("mScroller"); scrollerField.setAccessible(true); Field interpolator = ViewPager.class.getDeclanetworkingField("sInterpolator"); interpolator.setAccessible(true); 

El método setViewPagerScroller utiliza la syntax de class interna anónima de kotlin. Esa es la parte del 'object' que no tiene contraparte real en la syntax de Java.

 private void setViewPagerScroller() { try { Field scrollerField = ViewPager.class.getDeclanetworkingField("mScroller"); scrollerField.setAccessible(true); Field interpolator = ViewPager.class.getDeclanetworkingField("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. } } 

Y la palabra key as es como un casting en java. Esperemos que pueda usar esto para traducir fun generateFinalButtonBehaviour() , contiene más de lo mismo.

La construcción Lazy, como era de esperar, se vuelve más prolija en java. Debes emplear la disciplina para no acceder al visor equivocadamente si eliges seguir la estructura a continuación.

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

También puede usar una class para representar con mayor precisión una initialization lenta de sus campos. (De modo que no puede, por error, acceder a un campo que pretendía inicializar con pereza) Esto se vuelve aún más detallado, pero podría valer la pena.