Impossible d'appeler la fonction d'extension kotlin depuis java


Rahul

Je sais que les fonctions d'extention kotlin sont compilées en tant que fonction statique en utilisant fileName comme nom de classe avec le suffixe Kt. Le problème est que ma fonction de paramètre String unique demande deux paramètres String lorsqu'elle est appelée à partir du code java.

La fonction d' extension est dans le fichier KUtils

fun String.extractDigits(strValue: String): String {
    val str = strValue.trim { it <= ' ' }
    var digits = ""
    var chrs: Char
    for (i in 0..str.length - 1) {
        chrs = str[i]
        if (Character.isDigit(chrs)) {
            digits += chrs
        }
    }
    return digits
}

Appeler le code Java

KUtilsKt.extractDigits("99PI_12345.jpg")

Message d'erreur de compilation:

Erreur: (206, 42) erreur: la méthode extractDigits dans la classe KUtilsKt ne peut pas être appliquée à des types donnés;
requis: chaîne, chaîne
trouvée:
raison de la chaîne : la longueur des listes d'arguments réelle et formelle diffère

S'il vous plaît aider
merci

Jorn Vernee

Le problème est que l'instance réceptrice est codée en tant que paramètre. Donc:

fun String.extractDigits(strValue: String): String {...}

Devient ( javapsortie):

public static final java.lang.String extractDigits(java.lang.String, java.lang.String);

Mais vous ne transmettez qu'un seul argument à la fonction.

Je ne comprends pas très bien pourquoi vous utilisez une fonction d'extension ici, je m'attendrais à voir l'instance de réception utilisée au lieu de passer une valeur distincte:

fun String.extractDigits(): String {
    val str = this.trim { it <= ' ' } // Using `this`, i.e. the receiving instance
    var digits = ""
    var chrs: Char
    for (i in 0..str.length - 1) {
        chrs = str[i]
        if (Character.isDigit(chrs)) {
            digits += chrs
        }
    }
    return digits
}

Ensuite, en Java, vous pouvez l'appeler comme vous l'avez essayé, et en Kotlin comme ceci:

val str = "123blah4"
println(str.extractDigits()) // prints 1234

Articles connexes


Impossible d'appeler la fonction en Java

chantier naval: Lorsque j'essaie d'appeler la fonction de paroles dans ce code, une "déclaration de méthode non valide; type de retour requis" se produit. J'apprends Java et très très nouveau pour lui. Je ne sais pas comment définir la fonction et appeler la f

Impossible d'appeler la fonction

Kevin McNally Je n'arrive pas à obtenir ma variable globale Guesses dans la fonction. Le programme saute simplement la fonction. def getList(Guesses): alphabet = 'abcdefghijklmnopqrstuvwxyz' aList = list(abc) k = 0 while k < len(Guesses):

Kotlin Comment puis-je appeler la fonction d'extension

Kaan Je veux appeler une fonction d'extension de la classe MainActivity dans une autre classe. Comment puis-je faire ceci? object MainActivity : AppCompatActivity() { val StringBuilder.readHistory: StringBuilder get() { val temp = this@readHistory

impossible d'appeler une fonction depuis une autre fonction

Tom Novelle Salut, j'essaie d'utiliser tkinter pour créer une page avec un bouton qui, lorsqu'il est enfoncé, changera l'état d'une zone de saisie sur cette page de lecture seule à normal. voici mon code où la fonction appelée par le bouton est dans la classe