Tag: 参数

构建器模式和大量的强制性参数

迄今为止,我使用了以下构建器模式的实现(与此处描述的实现相反): public class Widget { public static class Builder { public Builder(String name, double price) { … } public Widget build() { … } public Builder manufacturer(String value) { … } public Builder serialNumber(String value) { … } public Builder model(String value) { … } } private Widget(Builder builder) { … } } 这适用于我遇到的大多数情况,我需要建立一个复杂的对象与各种必需/强制性和可选参数。 然而,最近我一直在努力去理解,当所有的参数都是强制性的(或者至少绝大多数参数是强制性的)时,这种模式是有什么好处的。 […]

当我期望两个函数时,如何只传递一个参数给函数?

fun multipleParams(id: Int = 1 , name: String) { … } 我在课堂上创建了上面的方法。 以下方法调用是正确的: multipleParams(1,"Rose") 有没有可能以某种方式使用它,有时我只传递name ,有时两个? multipleParams(1,"Rose") multipleParams("Rose")

Kotlin实体类型参数不能作为函数体中的类型参数

Kotlin中的特定类型参数可防止类型参数擦除,并允许在运行时知道类型参数。 这允许以下代码编译并按预期方式运行: inline fun <reified T> isA(value: Any) = value is T 但是,当我尝试使用“T”作为类型参数而不是独立时,我得到一个消息,它是一个已擦除类型。 以下代码仅供说明用途 : inline fun <reified T> isListOfA(name: String): Boolean { val candidate = Class.forName(name) return candidate is List<T> } 这是由于技术限制吗? 如果是这样,那么这个限制是什么?

Val不能在kotlin中重新分配编译时间错误的局部变量

这里在乐趣交换我试图改变a1与b1的值,但它显示val不能被重新分配编译时错误。 如果我不能像这样改变,那么怎么可能呢。 fun swap(a1: String, b1: String) { val temp = a1 a1 = b1 b1 = temp } 注意:这只是一个示例,要知道为什么我不能像在java中那样重新分配局部变量

为什么Java方法的Integer参数映射到Int而不是平台类型?

受另一个问题的启发。 在fastutil库中有IntArrayList类,它有一个具有以下Java签名的方法: public void push(Integer o) 从Kotlin被视为 push(o: Int) 有一个特定的原因,为什么它是Int而不是平台类型Int! ? 我期望它是push(o: Int!) ,至少是因为在Java源代码中使用Kotlin源代码定义的具有相同签名的方法具有Int! 作为从Kotlin中看到的参数类型(甚至在不同模块中定义,甚至从该模块的jar中导入)。 此外,所描述的行为导致push(Integer o)与具有Int参数合法的push(int o) (在同一个类中)冲突 – 它们都被视为push(o: Int) 。 如果有Int! Integer ,不会有冲突(我也试着在我的代码中定义这一对方法 – 仍然工作,因为我期望,有Int! )。 Kotlin版本是1.0.2 。 fastutil Gradle依赖: compile group: 'it.unimi.dsi', name: 'fastutil', version: '7.0.12'

在Kotlin中传递listOf(mapOf(x,y,z))作为参数

对于Kotlin来说,这是一个非常新的问题,需要我将这些值作为函数的参数 ( starting = "begin", target = "end", edges = listOf( mapOf("start" to "x", "end" to "y", "distance" to 25) ) } 我得到了前两个罚款,但地图清单令我困惑。 a(starting: String, target: String, edges: ListOf(mapOf(x,y,z)){} 谢谢

如何在Kotlin注释中声明数组值?

我在Kotlin创建自己的注释时遇到了一些问题。 我必须创建一些注释,并在其中一些我需要声明与数组类型的值。 在Java中,我们可以这样做: public @interface JoinTable { … JoinColumn[] inverseJoinColumns() default {}; … } JoinColumn也是一个注释类型。 我想在科特林做这样的事情: annotation class JoinTable( val name: String, val joinColumns: Array<JoinColumn> ) 我也试图做到这一点: annotation class JoinTable( val name: String, val joinColumns: List<JoinColumn> ) 但是我的IDe说: 注释成员的类型无效 我该怎么办? 谢谢!

Kotlin编译器是否始终保留字节码中的参数名称?

在kotlin-reflect ,类KParameter具有可空name ,其KDoc表示: 该参数在源代码中声明的名称;如果参数没有名称或名称在运行时不可用,则为null 。 无名参数的例子包括用于成员函数的这个实例,用于扩展函数或属性的扩展接收器, 在没有调试信息的情况下编译的Java方法的参数 等等 。 它讲述了众所周知的事实,即Java并不总是在字节码中包含参数名称,但它没有提到Kotlin类,尽管还有其他一些类。 我可以假设Kotlin编译器保留为Kotlin源代码中的函数声明的参数名称吗? (特别是,我需要构造函数参数名称)。