在Kotlin中没有静态关键字。
在Kotlin中表示静态Java方法的最佳方法是什么?
在Kotlin中没有静态关键字。
在Kotlin中表示静态Java方法的最佳方法是什么?
当前回答
您可以使用Companion Objects - kotlinlang
它可以通过首先创建该接口来显示
interface I<T> {
}
然后我们必须在该接口内部创建一个函数:
fun SomeFunc(): T
然后,我们需要一节课:
class SomeClass {}
在该类中,我们需要一个伴生对象:
companion object : I<SomeClass> {}
在那个同伴对象中,我们需要旧的SomeFunc函数,但是我们需要重写它:
override fun SomeFunc(): SomeClass = SomeClass()
最后,在所有这些工作下面,我们需要一些东西来支持静态函数,我们需要一个变量:
var e:I<SomeClass> = SomeClass()
其他回答
对于Java:
public class Constants {
public static final long MAX_CLICK_INTERVAL = 1000;}
等价的Kotlin代码:
object Constants {
const val MAX_CLICK_INTERVAL: Long = 1000}
因此,等价于Java静态方法的是Kotlin中的对象类。
您可以使用Companion Objects - kotlinlang
它可以通过首先创建该接口来显示
interface I<T> {
}
然后我们必须在该接口内部创建一个函数:
fun SomeFunc(): T
然后,我们需要一节课:
class SomeClass {}
在该类中,我们需要一个伴生对象:
companion object : I<SomeClass> {}
在那个同伴对象中,我们需要旧的SomeFunc函数,但是我们需要重写它:
override fun SomeFunc(): SomeClass = SomeClass()
最后,在所有这些工作下面,我们需要一些东西来支持静态函数,我们需要一个变量:
var e:I<SomeClass> = SomeClass()
您只需要创建一个伴生对象并将函数放入其中
class UtilClass {
companion object {
// @JvmStatic
fun repeatIt5Times(str: String): String = str.repeat(5)
}
}
从kotlin类中调用该方法:
class KotlinClass{
fun main(args : Array<String>) {
UtilClass.repeatIt5Times("Hello")
}
}
或使用import
import Packagename.UtilClass.Companion.repeatIt5Times
class KotlinClass{
fun main(args : Array<String>) {
repeatIt5Times("Hello")
}
}
从java类中调用该方法:
class JavaClass{
public static void main(String [] args){
UtilClass.Companion.repeatIt5Times("Hello");
}
}
或者在方法中添加@JvmStatic注释
class JavaClass{
public static void main(String [] args){
UtilClass.repeatIt5Times("Hello")
}
}
或者在方法中添加@JvmStatic注释并在java中进行静态导入
import static Packagename.UtilClass.repeatIt5Times
class JavaClass{
public static void main(String [] args){
repeatIt5Times("Hello")
}
}
除了迈克尔安德森的回答,我在我的项目中有其他两种编码方式。
第一:
你可以把所有变量白到一个类。 创建一个名为Const的kotlin文件
object Const {
const val FIRST_NAME_1 = "just"
const val LAST_NAME_1 = "YuMu"
}
您可以在kotlin和java代码中使用它
Log.d("stackoverflow", Const.FIRST_NAME_1)
第二:
您可以使用Kotlin的扩展函数 创建了一个名为Ext的kotlin文件,下面的代码是Ext文件中的所有代码
package pro.just.yumu
/**
* Created by lpf on 2020-03-18.
*/
const val FIRST_NAME = "just"
const val LAST_NAME = "YuMu"
你可以在kotlin代码中使用它
Log.d("stackoverflow", FIRST_NAME)
您可以在java代码中使用它
Log.d("stackoverflow", ExtKt.FIRST_NAME);
对于Android使用从单个活动到所有必要活动的字符串。 就像java中的静态
public final static String TEA_NAME = "TEA_NAME";
Kotlin中的等效方法:
class MainActivity : AppCompatActivity() {
companion object {
const val TEA_NAME = "TEA_NAME"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
另一个需要价值的活动是:
val teaName = MainActivity.TEA_NAME