Tag: 参数

Java是否支持默认参数值?

我遇到了一些具有以下结构的Java代码: public MyParameterizedFunction(String param1, int param2) { this(param1, param2, false); } public MyParameterizedFunction(String param1, int param2, boolean param3) { //use all three parameters here } 我知道在C ++中,我可以给参数分配一个默认值。 例如: void MyParameterizedFunction(String param1, int param2, bool param3=false); Java支持这种语法吗? 有没有任何理由为什么这两个步骤的语法是可取的?

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

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

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

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

D在args中接收位置?

我很早就看到D(比如昨天在寻找Kotlin基准之后…),并且正在试图决定它是否是我想要应对的语言。 我试图从命令行通过一些参数,我有点惊讶。 假设我通过“-Foo-Bar”。 我的程序很简单: import std.stdio; void main(string [] args) { foreach(arg; args) { writeln(arg); } } 来自Java,我期望它打印 -foo -酒吧 但是我的D程序似乎收到它的位置作为第一个参数? 输出是: /首页/(用户名)/ Java_Projects / HelloD / hellod -foo -酒吧 我试图寻找这个,但所有的谷歌命中是指Java的-D开关…所以,这是预期的行为? 如果是,有谁知道为什么?

已实施/重写方法中的参数的适当名称

我正在使用android studio 3.0.1,我正在使用kotlin开发android应用程序。 所以,我已经在我的项目中配置了kotlin。 当我重写任何方法配置kotlin后,我得到的参数名称为p0,p1,p2等,如下所示。 override fun query(p0: Uri?, p1: Array?, p2: String?, p3: Array?, p4: String?): Cursor { … } 而不是这些名字,我想要像下面的投影,选择,selectionArgs等参数的适当名称。 public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) { … } 当我使用java它工作正常,但是当我开始使用kotlin这个问题发生。 这个参数名称很混乱。 所以,我想获得像我在Java代码中获得的名称。 有没有办法做到这一点?

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

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