Tag: 科特林

Kotlin内部可见性修改器的范围

我有一个理解内部访问修饰符的问题。 在我的例子中,我不能产生任何与公众不同的情况。 即使我创建了一个jar子,我也可以从jar子外部(从与jar子中使用的不相关的其他包装中)访问jar子内部的function。 在文档中使用术语模块,但我无法找出模块是什么。 我的问题是: kotlin中的模块是什么? 访问修饰符内部与公共修饰符有什么不同?

如何在kotlin中创建一个空数组?

我正在使用Array(0, {i -> “”}) ,我想知道是否有更好的实现,如Array() 另外,如果我使用arrayOfNulls(0) as Array ,编译器会提醒我这个转换永远不会成功。 但它是Array(0, {i -> “”})的默认实现。 我想念什么?

什么可以在编译时常量(const val)中expression?

编译时常量的文档列出了属性需要履行的三个要求,以便将其声明为const val 。 这些是: 对象的顶级或成员 使用Stringtypes的值或基元types初始化 没有自定义的getter “无自定义getter”的要求使我相信我不能在常量声明中使用任何函数,但是这似乎并非如此。 这些编译: const val bitmask = (5 shl 3) + 2 const val aComputedString = “Hello ${0x57.toChar()}orld${((1 shl 5) or 1).toChar()}” const val comparedInt = 5.compareTo(6) const val comparedString = “Hello”.compareTo(“World!”) const val toStringedInt = 5.compareTo(6).toString() const val charFromString = “Hello World!”.get(3) 但是,这些不会编译: // An extension function on […]

如何在GSON中反序列化Kotlin代表

我有这个class级: class Project { val nameProperty = SimpleStringProperty(“foobar”) val name by nameProperty } 我使用Fx-GSON库来序列化JavaFx属性。 当我序列化到JSON我得到这个: { “nameProperty”: “foobar”, “name$delegate”: “foobar” } 但是,当我将其反序列化回到Projecttypes的对象时, name和nameProperty是2个不同的对象 。 如何使name属性委托给新的nameProperty ?

使用Kotlin WHEN子句进行<, =,>比较

我试图使用WHEN子句与>或<比较。 这不会编译。 在比较中使用普通的布尔运算符( =>)来实现这一点吗? val foo = 2 // doesn’t compile when (foo) { > 0 -> doSomethingWhenPositive() 0 -> doSomethingWhenZero() doSomethingWhenNegative() } 我试图find一个无界的范围比较,但无法做到这一点呢? 有可能把这个写成一个无限的范围吗? // trying to get an unbounded range – doesn’t compile when (foo) { in 1.. -> doSomethingWhenPositive() else -> doSomethingElse() } 你可以把整个expression式放在第二部分,这可以,但似乎是不必要的重复。 至少它编译和工作。 when { foo > 0 -> doSomethingWhenPositive() […]

在Kotlin中使用Javascript库

我最后一次使用Kotlin的时候是2015年12月,当时我用它来解决一些欧拉项目问题。 这一次我想尝试与Javascript的互操作性。 现在我的问题是,我们如何在Kotlin中导入/使用现有的Javascript库? 我见过一些使用native关键字的人,我只是想简单地解释一下。

Kotlin&Hibernate IllegalArgumentException:无法将字符串字段Job.name设置为Job

我试图坚持一个单一的对象与hibernate到Postgres数据库。 这个类看起来像这样: @Entity @Table(name = “jobs”) data class Job( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Int? = 0, var name: String? = “” ) 我用下面的代码创建一个hibernate会话: fun createSessionFactory(targetClass: Class): SessionFactory? { val registryBuilder = StandardServiceRegistryBuilder() if (sessionFactory == null) { val configuration = hashMapOf( Environment.DRIVER to “org.postgresql.Driver”, Environment.URL to “jdbc:postgresql://localhost:5432/testdb”, Environment.DIALECT to “org.hibernate.dialect.PostgreSQL9Dialect”, Environment.USER to “user”, […]

与JPA Kotlin:默认构造函数地狱

按照JPA的要求,@ @Entity类应该有一个默认的(非arg)构造函数来从数据库中检索对象时实例化对象。 在Kotlin中,属性在主构造函数中声明非常方便,如下例所示: class Person(val name: String, val age: Int) { /* … */ } 但是,当非参数构造函数被声明为次要构造函数时,它需要传递主构造函数的值,所以需要一些有效的值,如下所示: @Entity class Person(val name: String, val age: Int) { private constructor(): this(“”, 0) } 如果这些属性比String和Int有更复杂的types,并且它们是不可空的,那么为它们提供值看起来完全不好,特别是当主构造函数和init块中有很多代码,并且参数是积极使用 – 当它们被重新分配时,大部分代码将被重新执行。 而且, val -properties不能在构造函数执行后重新分配,所以不可变性也会丢失。 所以问题是:Kotlin代码如何适应与JPA无代码重复,选择“魔术”的初始值和不可变性的损失? PS除了JPA,Hibernate是否可以构造没有默认构造函数的对象呢?

Spring在kotlin中注入通用接口实现列表

免责声明:Kotlin新手,可能是一个容易解决的问题或误解的基础知识。 我正在试图注入一个特定的接口的Spring实现列表,在一个普通的Java类中,这很容易,就像这样: @Autowired List myClassList; 但是在Kotlin做以下给我一个错误 @Autowired lateinit private var myClassList: List<IMyClass> // No beans of ‘? extends IMyClass’ or ‘List<? extends IMyClass>’ types found 这样做: @Autowired lateinit private var myClassList: List<IMyClass> 使注入工作,但不允许我使用接口中定义的函数,该函数将通用对象作为输入 // Out-projected type ‘IMyClass’ prohibits the use of ‘public abstract fun myFunction(obj: T!): T! defined in com.path.IMyClass’ 那么我该如何解决呢? 用一些特定的syntac来重写Kotlin中的接口更容易吗?

Android:导航到另一个片段

我有一个ViewPager和TabLayout设置4片段,就像任何现代的社交应用程序。 我尝试过,尝试过,尝试过,但我无法find我的问题的答案。 在其中一个选项卡中,我想从片段导航到另一个片段,但不是导航,而是将其放在顶部,我仍然可以与前一个片段进行交互。 这不是替代,只是把它放在最上面。 码: // Chat fragment : Inside the onCreateView fun this.loadConvos({ chats -> this.chatsArray = chats this.chatsArray.sortBy { it.timestamp} this.chatsArray.reverse() listView.adapter = ChatBaseAdapter(this.chatsArray, context) listView.setOnItemClickListener { parent, view, position, id -> this.chatID = this.chatsArray[position].chatID!! Toast.makeText(context, “Position Clicked: ” + position, Toast.LENGTH_SHORT).show() childFragmentManager .beginTransaction() .replace(R.id.chatFragmentLayout, MessagesFragment()) .addToBackStack(null) .commit() } }, { error -> […]