Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

305
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!