这是一个一般性的问题。假设我有一个用kotlin编写的扩展函数,它将DP转换为PX,并返回一个非空Int
fun Int.toPx() { /** implementation */ }
java中的函数如下所示
public int toPx(int $receiver) { /** implementation */ }
在我看来,$receiver
使Java-interop感到生成和不受欢迎。
@jvmname
只能应用于函数、属性访问器和文件的顶级包外观。不支持参数名称。
基本上,您可以定义两个函数,一个使用简单参数,另一个使用接收器:
fun toPx(value: Int) { /* implementation */ }
fun Int.toPx() = toPx(this)
但是,可以预料的是,这将无法编译,因为这两个函数将具有相同的JVM签名。因此,为了消除它们的歧义,将@jvmname(“...”)
添加到扩展中,并(可选地)将扩展标记为inline
:
fun toPx(value: Int) { /* implementation */ }
@JvmName("toPxExtension") @Suppress("nothing_to_inline")
inline fun Int.toPx() = toPx(this)
上的编译器错误: 类型不匹配 必需:foo ?>
我在Kotlin文件中定义了扩展函数。 其中是(生成的)java类。现在,我想用正常的java代码访问它: 然而,那是行不通的。IDE将无法识别方法,编译失败。
主要内容:扩展函数,扩展函数是静态解析的,伴生对象的扩展,扩展的作用域,扩展声明为成员Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。 扩展函数 扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式: receiverType:表示函数的接收者,也就是函数扩展的对象 functionName:扩展函数的名称 params:扩展函数的参数,可以为NULL 以下实
Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式。 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响。 扩展函数 扩展函数可以在已有类中添加新的方法,不会对原类做修改,扩展函数定义形式: fun receiverType.functionName(params){ body } receiverType:表示函数的接收者,也就是函数扩
问题内容: 假设从CGI开始,我已经将文件显示为文件。我想将的文件扩展名更改为显示文件。我该怎么做? 问题答案: , 例如:
在针对PHPCMS V9做二次开发的时候,您可以自定义一些全局函数且不影响以后官方升级 您自定义的文件请放置于该文件中 phpcms\libs\functions\extention.func.php或者以.func.php格式命名,放置于如下目录中 phpcms\libs\functions\autoload