有没有办法列出允许返回空值的对象的所有属性? val cls = javaClass().kotlin for(property in cls.properties) { if(property.accessible) { //Is it nullable? } }
一个非常基本的问题,在Kotlin中连接字符串的正确方法是什么? 在Java中,您可以使用concat()方法,例如 String a = “Hello “; String b = a.concat(“World”); // b = Hello World 尽管如此, concat()函数不适用于Kotlin。 我应该使用+号吗?
Int::class.java.isInstance(4)是false。 但是String::class.java.isInstance(“aa”)是真的。 在这样的函数中, Inttypes检查的正确方法是什么? fun castValue(v: Any?, clazz: Class): T? { if (v != null && clazz.isInstance(v) return v as T return null } val result = castValue(4, Int::class.java)
我正在将一个Java项目转换成Kotlin。 我已经将User对象转换为Kotlin,当我运行Java中现有的JUnit测试时,我得到Kotlin User对象的两个实例之间的错误。 User.kt: data class User ( @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “sequenceGenerator”) @SequenceGenerator(name = “sequenceGenerator”) var id: Long? = null, … ) TestUtil.java import static org.assertj.core.api.Assertions.assertThat; public class TestUtil { public static void equalsVerifier(Class clazz) throws Exception { Object domainObject1 = clazz.getConstructor().newInstance(); // Test with an instance of the same class Object […]
我正在开发一个新的库,我想用项目设置开始项目,使用dokka生成API文档。 我使用Gradle作为构建工具,并将以下内容添加到我的build.gradle文件中: buildscript { ext.kotlin_version = ‘1.2.10’ ext.dokka_version = ‘0.9.15’ repositories { jcenter() } dependencies { classpath “org.jetbrains.dokka:dokka-gradle-plugin:${dokka_version}” } } apply plugin: ‘org.jetbrains.dokka’ … dokka { outputFormat = ‘html’ includes = [‘Module.md’] linkMapping { dir = “src/main/kotlin” url = “https:///src/main/kotlin” suffix = “#L” } } 当我运行gradlew dokka ,正确创建了文档,包括Modules.md文件中的模块和包文档。 不过,我不看到bitbucket回购的源代码链接。 请有人建议如何从dokka得到更多的信息,为什么这样的链接没有创建?
我试图将这个C#类转换为Android的kotlin: public class ChildItemCollection : ICollection where P : class where T : ChildItem where C : class, ICollection { private P _parent; private C _collection; public ChildItemCollection(P parent, C collection) { this._parent = parent; this._collection = collection; } … } public class ChildItemCollection : ChildItemCollection<P, T, List> where P : class where T : […]
我有一个自定义对话框类定义跟随生成器模式。 我的代码没有问题。 但是现在我想重建能够在java 8 lambda上使用 CustomDialogList.kt class CustomDialogList(context: Context, private var title: Int?, private var icon: Int?, private var map: Map, private var listner: OnItemClickListener) : Dialog(context) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.custom_dialog_list) txtTitle.text = context.getString(title!!) txtTitle.setCompoundDrawablesWithIntrinsicBounds(icon!!, 0, 0, 0) val listString: MutableList = mutableListOf() val listObject: MutableList = mutableListOf() for ((k, v) […]
为以下代码生成的字节码在Derived类中创建一个private final Base $$delegate_0字段。 当可变字段b被分配时,原始委托不会更改。 有没有办法在运行时更改委托,同时保持zero boilerplate实施? 接口Base { 有趣的打印() } class BaseImpl(val x:Int):Base { 重写fun print(){println(x)} } 派生类(var b:Base):基于b fun main(args:Array){ val b = BaseImpl(10) val derived =派生(b) derived.print()//打印10 derived.b = BaseImpl(20) derived.print()//打印10 } 该示例来自文档https://kotlinlang.org/docs/reference/delegation.html并进行编辑。
所以说我有一个从套接字连接返回的流。 流被返回终止’\ 0’,但在kotlin我似乎无法得到这个以相同的方式工作。 下面的代码是在Java中,我可能只是看起来很简单。 public final String readUpToNull(InputStream inputStream) throws IOException { StringBuilder builder = new StringBuilder(); char ch; while ((ch = (char) inputStream.read()) != ‘\0′) { builder.append(ch); } return builder.toString(); } 如果有人知道如何在与Kotlin中的流进行通信的同时进行此操作。 在这里的另一篇文章是覆盖阅读全文的文字。 套接字返回由’\ 0’分隔的更长的字符串。 所以问题是我需要能够加载第一个字符串,然后第二个字符串。 Example Server : hello\0 xml stuff all right here\0 Client: read hello Client: read xml stuff all right […]
在Java 8中,有Stream.collect ,它允许在集合上进行聚合。 在Kotlin中,这不是以同样的方式存在,除了可能作为stdlib中扩展函数的集合。 但是不清楚不同用例的等价关系是什么。 例如, JavaDoc for Collectors的顶部是为Java 8编写的示例,将它们移植到Kolin时,不能在不同的JDK版本上使用Java 8类,因此可能应该使用不同的方式编写。 就在线资源展示Kotlin集合的例子而言,它们通常是微不足道的,并没有真正与相同的用例相比较。 什么是真正符合Java 8 Stream.collect记录的案例的好例子? 这里的列表是: 将名字积累到列表中 将名称累加到TreeSet中 将元素转换为字符串并连接它们,用逗号分隔 计算员工的工资总额 按部门分组员工 按部门计算工资总额 将学生划分为通过和失败 上面链接了JavaDoc中的细节。 注意: 这个问题是由作者故意写的和回答的( 自我回答的问题 ),所以对于常见的Kotlin话题的习惯性的回答是在SO中。 此外,为了澄清一些真正的古老的答案写为科特林的阿尔法,是不是今天的Kotlin准确。