Tag: Java

如何设计减少Kotlin中的冗余类?

我在https://github.com/antoniolg/Kotlin-for-Android-Developers学习样本“Android开发者Kotlin(书)” 在不同的kt文件中有三个类,我认为这三个类是相似的,而这些mulit类使得程序变得复杂。 如何重新设计项目框架,使项目更清晰? DbClasses.kt class DayForecast(var map: MutableMap<String, Any?>) { var _id: Long by map var date: Long by map var description: String by map var high: Int by map var low: Int by map var iconUrl: String by map var cityId: Long by map constructor(date: Long, description: String, high: Int, low: Int, iconUrl: String, […]

Java通配符类型与Kotlin Star-projection

我正在阅读关于Java和Koltin之间差异的kotlin文档,在这里https://kotlinlang.org/docs/reference/comparison-to-java.html 。 有人指出, Koltin没有通配符类型 。 但仔细阅读泛型文档后,我发现了有关星形投影的信息 ,老实说,我看不出有什么不同。 有人可以向我解释这是怎么回事 List<?> list; 不同于此 lateinit var list: MutableList<*>

在调用Kotlin数据类中的超类构造函数之前访问函数

我使用Kotlin中的数据类来显着减少我不得不写的Java代码的数量。 但是,在我的一个Java类中,我不确定如何在Kotlin中实现相同的结果。 我的Java类看起来有点像这样: public class DataObject { private int mId; private String mName; public DataObject(int id, String name) { mId = id; mName = name; } public DataObject(Context context, int id) { mId = id; Cursor cursor = … cursor.moveToFirst(); mName = cursor.getString(…); cursor.close(); } public int getId() { return mId; } public String getName() […]

Kotlin通用铸造到一个更具体的子类

所以我试图搞砸Kotlin,我有一个老的java MVP框架,在java中我们不得不将一个通用的接口转换为一个更具体的接口,比如public <P extends BaseContract.Presenter> P getPresenter() 我们将在一个子类中作为 @Override public AdvertisementContract.Presenter getPresenter() { return (AdvertisementContract.Presenter)super.getPresenter(); } 在Kotlin我要这样做: override fun getPresenter(): AdvertisementContract.Presenter { return super.getPresenter() as AdvertisementContract.Presenter } 有没有什么我可以做,而不需要在基础界面中修改泛型?

用Kotlin解释@Configuration @AutoConfigureAfter

我是一个python开发人员,对于Spring引导和gradle是全新的。 不过,我很好,与Java和Kotlin尽我所能。 我试图在本地主机上运行Spring Boot应用程序(Kotlin)。 除了这些行外,Gradle构建工作正常 @Configuration @AutoConfigureAfter(DispatcherServletAutoConfiguration::class) open class Assembly : WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter() { . . 没有值传递给参数resourceProperties,mvcProperties,beanFactory …. 我明白WebMvcAutoConfigurationAdapter构造函数期望这些参数,但不应该通过注释@Configuration和@AutoConfigureAfter自动传递。 由于我是春季引导全新的,我不知道什么是错的,在哪里。 由于这段代码已经在生产中运行,所以我很困惑我是否缺少一些本地配置或者gradle conf或其他东西。

对于Kotlin声明的函数,冗余的SAM构造函数不能被移除,而是在Java声明的函数上工作

我有一个Java类的功能如下 public void setPositiveButton(int resId, DialogInterface.OnClickListener listener) 我也有相同的Kotlin Class功能,如下所示 fun setPositiveButton(resId: Int, listener: DialogInterface.OnClickListener) 当我从Kotlin代码打电话给他们时 javaClassObj.setPositiveButton(R.string.some_string, DialogInterface.OnClickListener { _, _ -> someFunc()}) kotlinClassObj.setPositiveButton(R.string.some_string, DialogInterface.OnClickListener { _, _ -> someFunc()}) 可以减少Java类函数调用,但不能减少Kotlin类函数 javaClassObj.setPositiveButton(R.string.some_string, { _, _ -> someFunc()}) kotlinClassObj.setPositiveButton(R.string.some_string, DialogInterface.OnClickListener { _, _ -> someFunc()}) 为什么Kotlin函数调用不能按照为Java启用的方式减少冗余SAM-Constructor?

没有IDE协助的Kotlin为Gradle设置 – Kotlin类没有使它成为classpath

我正在尝试自己创建一个使用Gradle的Java子模块。 我遵循http://kotlinlang.org/docs/reference/using-gradle.html#using-Gradle中的步骤,尽管在不同的Gradle文件中分割了一些东西,IDE似乎正确地识别了一切,Kotlin源码不把它放到classpath中。 在https://github.com/stoyicker/master-slave-clean-store/tree/792c8207776846b0320c1e055521a288c9e63b5a你可以看到失败的快照。

在kotlin中使用意外的令牌(在同一行上使用;来分隔表达式)

我正在使用java开发的android项目中使用kotlin,我在服务层中使用了kotlin数据类 现在我想添加替代标签在连载 @SerializedName(value="name", alternate={"person", "user"}) val title:String, 这给了我意想不到的令牌问题,它似乎是从kotlin方面 这似乎kotlin问题可以有人指出我的问题

与Kotlin泛型混淆

我是Kotlin的新手,我正在尝试编写一些相当简单的代码,但我无法弄清楚如何使用泛型来实现它。 我有一个Handler特点,代表事物的处理程序。 我不能更改处理程序的代码,因为它来自库 。 trait Handler<T> { fun handle(result: T) } 下面的所有代码都在我的控制之下 – User是具有诸如AdminUser和GuestUser等子类的公开类。 一个名为AdminUserAction的特性可以创建一个AdminUser列表,然后将列表传递给List<AdminUser>一个处理器。 trait AdminUserAction { fun then(handler: Handler<List<AdminUser>>) } 现在我想为AdminUserAction传递一个AdminUserAction处理程序,而不是AdminUser 。 假设处理程序只记录用户的名字,并且不对管理员指定的属性做任何事情。 fun doIt(action: AdminUserAction, printAllNames: Handler<List<User>>) { action.then(printAllNames) } 但是,这段代码给了我一个TypeMismatch 。 由于处理程序的类型是List<T>并且是不可变的,所以前面的代码应该是完全安全的,但编译器无法解决这个问题。 如果我可以访问处理程序的代码,我可以做到以下几点,它会工作 – trait Handler<in T> { fun handle(result: T) } 但是,正如我之前所说,我不能修改Handler,因为它来自一个库。 此外,似乎很难做到这一点,因为处理程序的类型是完全一般的,应该也可以用于其他类型的处理程序。 我试过继承Handler并使用它 – trait ListHandler<in T>: Handler<List<T>> { […]

Java vs Kotlin – 同一个类中的Spring @Async方法

我发现在Java中,当您尝试从同一个类中调用@Async方法时,您实际上在同一个线程中运行方法,但是在Kotlin中它以异步方式运行。 看起来像代理包装工作不同。 例: @Service class BasicService { @Scheduled(fixedRate = 1000) fun asyncCall() { log.info("Async call") doAsync() } @Async("myAsyncExecutor") open fun doAsync() { log.info("DO ASYNC AND SLEEP. Thread: ${Thread.currentThread().name}") Thread.sleep(7000) log.info("Finsh async call") } … } 当您使用Kotlin doAsync()通过myAsyncExecutor异步运行时, myAsyncExecutor在Java中运行在相同的线程上,并且调度器将每7秒等待一次,然后再次启动。 那么科特林如何解决这个问题呢?