Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

298
Vistas
¿Cómo reemplazar el parámetro "t" por "className"?
Android Studio 3.2.1 Kotlin plugin version 1.3.11-release-Studio3.2-1 ext.kotlin_version = '1.3.11' RxJava 1.3.0

Por ejemplo, cuando escribo el archivo *.kt : Observable.unsafeCreate{} y luego presiono Ctrl+Space entre {} , luego IntellijIdea me sugiere que escriba el símbolo t -> , pero cuando hago lo mismo en el archivo .java , el resultado es subscriber -> :

*.kt :

 fun anyFunc(): Observable<Boolean>{ return Observable.unsafeCreate { t -> t } }

ingrese la descripción de la imagen aquí

archivo *.java :

 public void anyFunc() { Observable.unsafeCreate(subscriber -> {}); }

¿Cómo hacer que el archivo Kotlin tenga el mismo comportamiento de escritura de sugerencias que en el archivo Java?


[ACTUALIZAR] Parece que se debe al método call() en rx.functions.Func1 , tiene param t :

 public interface Func1<T, R> extends Function { R call(T t); }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Estoy usando

Estudio Android 3.2.1 ,

rxjava:2.2.0 ,

Complemento Kotlin versión 1.3.11-release-Studio3.2-1

Después de escribir el archivo *.kt : Observable.unsafeCreate{} y presionar Ctrl+Espacio entre {} , Android Studio me muestra la siguiente sugerencia:

ingrese la descripción de la imagen aquí

La misma sugerencia que muestra Android Studio cuando estoy escribiendo en el archivo *.java .

No hice ningún cambio de configuración en las Preferencias de Android Studio.

Supongo que está importando Observable desde rx , el primer elemento en la lista de finalización en la imagen a continuación. Intente importar Observable desde io.reactivex : elemento resaltado en la lista de finalización a continuación, puede ayudar: import io.reactivex.Observable .

ingrese la descripción de la imagen aquí

Para usarlo necesitas importar rxjava2:

 implementation 'io.reactivex.rxjava2:rxjava:2.2.0'

EDITAR :

Como se descubrió, el diálogo de finalización del código mostró t -> porque el parámetro en Action1.call(T t) llamó t . Podemos verlo si observamos la firma del método rx.Observable.unsafeCreate en RxJava 1.3 :

 public static <T> Observable<T> unsafeCreate(OnSubscribe<T> f) { return new Observable<T>(RxJavaHooks.onCreate(f)); }

La interfaz OnSubscribe amplía Action1<Subscriber<? super T> , y Action1 tiene la siguiente firma:

 public interface Action1<T> extends Action { void call(T t); }

Entonces, el parámetro se llama t y Android Studio lo sugiere como t -> .

En RxJava2 tenemos firma diferente:

 public static <T> Observable<T> unsafeCreate(ObservableSource<T> onSubscribe) {...} public interface ObservableSource<T> { void subscribe(@NonNull Observer<? super T> observer); }

Vemos que en el parámetro del método ObservableSource.subscribe() se llama observer , por lo que lo vemos como observer-> .

Conclusión : la sugerencia de IDEA se basa en el nombre del parámetro del método de interfaz funcional que está implementando como lambda.

over 4 years ago · Santiago Trujillo Denunciar

0

En realidad, Intellij lo ayuda en el lado de Java pero no (todavía) en el lado de Kotlin.

El nombre del parámetro del subscriber se deriva del tipo genérico de la interfaz extendida, es decir, el Subscriber de interface OnSubscribe<T> extends Action1<Subscriber<? super T>> .

Sin embargo, en el lado de Kotlin, este mecanismo no se aplica y, por lo tanto, la finalización del código le sugiere el parámetro de la función de implementación, que en este caso es de Action1#call(T t) , así que solo t .

Puede probar que usa la información de tipo genérico simplemente haciendo un ejemplo básico:

 class CustomObject {} interface MyCustomConsumer extends Consumer<CustomObject> { } static void test(MyCustomConsumer mcs) { } public static void main(String[] args) { test( // <- place cursor here and start code completion and you should get "customObject"

Tenga en cuenta que para algunos tipos adapta el nombre, por ejemplo, String se convierte en s y los otros tipos en caja ( Long , Integer , etc.) están precedidos por una a (por ejemplo, aLong ; por supuesto, de lo contrario usaría una palabra reservada).

Si tiene curiosidad por lo que está sucediendo en el código fuente allí, es posible que desee revisar el código fuente de la comunidad de Intellij o, para Android Studio, es posible que desee pasar primero por Building Android Studio .

EDITAR: Debería haber agregado el código del complemento de Kotlin en su lugar ;-) si desea mejorar las sugerencias de finalización para Kotlin, puede consultar JetBrains/kotlin/idea/idea-completion . Además , JetBrains/kotlin/idea/src también podría valer la pena echarle un vistazo y probablemente terminarás mirando todos los paquetes de JetBrains/kotlin/idea ;-)

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda