Méthodes avec le même nom dans la même classe Les classes Java (en bref, des classes comme ↓) qui sont un mélange de méthodes de longueur variable et de méthodes de longueur fixe Nous avons étudié lequel est appelé lorsqu'il est appelé depuis Scala / Kotlin / Java avec un argument.
public class CalledClazz {
public static void method(Object... args){
System.out.println("Méthode d'argument de longueur variable" + Arrays.toString(args));
}
public static void method(Object args){
System.out.println("Méthode d'argument de longueur fixe" + args);
}
}
Comportement lorsqu'un argument est passé
--Java => Fondamentalement, method (Object args)
est exécuté, mais dans certains cas il devient [comportement étrange](appelé depuis #java).
--Kotlin => méthode (Object args)
est exécutée
--Scala => L'argument de longueur variable method (Object ... args)
est appelé ... Donc, [Comment appeler la méthode Java de l'argument de longueur fixe depuis Scala](La méthode java de l'argument de longueur fixe de #scala) La méthode d'appel) a également été examinée.
public class JavaClazz {
public static void main(String... args) throws IOException {
CalledClazz.method("Java");
CalledClazz.method(null);
Object s = null;
CalledClazz.method(s);
CalledClazz.method((Object)null);
}
}
Résultat d'exécution
Méthode d'argument de longueur fixe Java
Méthode d'argument de longueur variable null
Méthode d'argument de longueur fixe null
Méthode d'argument de longueur fixe null
Si vous passez null, en viendra-t-il à l'argument de longueur variable? De plus, ce n'est pas un tableau de type Object avec un élément, mais null est passé ... De plus, si vous déclarez une variable d'un type quelconque avec null et la transmettez, ou la convertissez en Object, elle aboutira à une méthode d'argument de longueur fixe ...
fun main() {
CalledClazz.method("Kotlin")
CalledClazz.method(null)
}
Résultat d'exécution
Méthode d'argument de longueur fixe Kotlin
Méthode d'argument de longueur fixe null
On dirait un comportement naturel.
object CallTestByScala extends App {
CalledClazz.method("Scala")
CalledClazz.method(null)
}
Résultat d'exécution
Méthode d'argument de longueur variable[Scala]
Méthode d'argument de longueur variable[null]
Pourquoi est-ce un tableau et la méthode d'argument de longueur variable est appelée?
val f: Object => Unit = CalledClazz.method
f("Scala")
Méthode d'argument de longueur fixe Scala
Il est venu pour sortir.
De cette manière, déclarer le type d'une fonction sans s'appuyer sur l'inférence de type semble être appelé comme prévu. Est-ce qu'il y a un autre moyen?
Au fait,
val f: Object => Unit = CalledClazz.method
f("Scala", "aaaaa")
Ensuite, la méthode avec un argument de longueur fixe est appelée et une valeur de type Tuple2 est transmise.
Méthode d'argument de longueur fixe(Scala,aaaaa)
Sortira.
Du point de vue de Scala, «method (Object ... args)» semble être traitée comme un paramètre itératif.
Si vous voulez passer scala.List
à une méthode de longueur variable Java ** comme prévu **
CalledClazz.method(List("a","b","b"): _*)
Doit être. Sans lui, il semble être traité comme un tableau avec 1 élément, avec un objet appelé `List (" a "," b "," b ") ʻen tant qu'élément.
Méthode d'argument de longueur variable[List(a, b, b)]
Sortira.
Scala: Comment passer aux paramètres répétés \ comme une liste \ -Qiita
Recommended Posts