Kotlin: Força método inline para preservar a quantidade de linhas definidas

votos
0

Então, eu tenho esse método que eu quero usar para o registo ao mesmo tempo, retornando o objeto registrado:

inline fun <T> T.btwLog(prefix:String=)=apply { Timber.d($prefix->${toString()}) }

A classe de madeira é a partir de um registo de biblioteca e também (quando configurado desta forma) mostra a linha em que foi chamado, que também é por isso que o método é em linha (para mostrar a linha e correcta classe de onde ele foi chamado) Por exemplo :

val b = someThingComplex().btwLog()

Isso funciona basicamente, o único problema é que o número da linha é errado. Isso basicamente tem que ser porque Kotlin insere o método e ao fazê-lo acrescenta algumas linhas para a classe (4) ?.

Assim, o exemplo de antes, provavelmente, tem um aspecto semelhante a este:

val b = someThingComplex()
        .apply { 
        Timber.d($prefix->${toString()})
        }

Uma alternativa é este método onde Kotlin não adiciona linhas adicionais:

inline fun Any.log(s:String=)= Timber.d(s+this)

Existe alguma maneira que eu poderia forçar Kotlin apenas em linha exatamente como eu o escrevi e não adicionar quebras de linha e material? Ou há uma maneira melhor que eu poderia definir o método em geral?

Obrigado.

Publicado 14/01/2020 em 00:02
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Eu suspeito que a mudança de números de linha pode ser devido ao chamado para apply. Tente-lo desta forma.

inline fun <T> T.btwLog(prefix: String = ""): T {
    Timber.d(prefix + "->" + this)
    return this
}
Respondeu 14/01/2020 em 01:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more