2017-09-04 118 views
0

我一直在使用Kotlin而不是Android。它确实使编程乐趣重演。 在某些情况下(主要是util类,其名称应该简短且方便),当自动将Java转换为Kotlin时,我希望可以选择在静态方法上使用@JvmStatic,而不是将调用者转换为MyClass.Companion.BarAndroid Studio转换为Kotlin:在某些情况下使用@JvmStatic

也就是说,在某些特定情况下,这将是不错的

public static foo(Barian bar) 

转换为

@JvmStatic 
fun foo(bar:Barian) 

,所以我可以保持从Java短调用语法:

MyClass.foo(bar) 

而不是

MyClass.Companion.foo(bar) 

很明显,在大多数情况下,我认为它有很多原因,比如未来兼容性,非Kotlin精神等等,但在少数情况下,它可以使Java代码(使用我的类)更短。

+2

你的问题是什么? – Mibac

+0

在一些中央util类上,Java代码不得不调用MyClass.Companion.foo()并不好。这些是为了使Java代码“整洁”而制作的类,所以我想让它们保持简短。 不幸的是,自动转换为Kotlin使它们成为伴侣对象。在大多数情况下,这是正确的,但有些情况下,我想让它添加@JvmStatic以缩短我的Java代码。或者至少,采取现有的伴侣对象功能,并使其呼叫者避免伴随呼叫。 (没有biggie,可以用正则表达式来完成,但是如果我可以从插件中获得它 - 为什么不呢?) –

+0

我不确定我是否正确。你想自动转换为Kotlin,将Java静态方法标记为“@ JvmStatic”?据我所知,没有这种选择 – Mibac

回答

0

你并不需要显式地指定同伴的命名空间,当你decalre你这样的“静态”的方法:

class MyClass { 

    companion object { 
     fun foo() {} 
    } 
} 

在这种情况下,你仍然可以通过调用它:

MyClass.foo() 

但是,尽管如此,静态方法并不是Kotlin特有的方式,应该通过使用该语言的其他功能来避免。

+1

,你可以[提交功能请求](https://youtrack.jetbrains.com/newIssue?project=KT&clearDraft=true&c=Type+Feature)。但是遗留的Java代码将不得不使用MyClass.Companion。 Java很长且冗长。我想保留旧代码“整齐”。 –

相关问题