我知道在Kotlin中没有静态函数,所以我在myClass1.kt和myClass2.kt中写了两个代码 我不知道哪个更好,你能告诉我吗? 谢谢! 主要 class HomeActivity : DemoActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Display1(this) Utility.Display2(this) } } myClass1.kt import android.content.Context import android.widget.Toast fun Display1(mContext: Context){ Toast.makeText(mContext, “Hello, World 1”, Toast.LENGTH_LONG).show(); } myClass2.kt import android.content.Context import android.widget.Toast object Utility { fun Display2(mContext: Context) { Toast.makeText(mContext, “Hello, World 2”, Toast.LENGTH_LONG).show(); } }
我正在尝试在Kotlin上写一个Vaadin应用程序。 对于数据绑定,Vaadin 8现在提供了types安全数据绑定的可能性。 在科特林,我会期待这样的工作: class LoginModel { var username: String = “” var password: String = “” } class LoginView : FormLayout() { val name = TextField(“name”) val password = TextField(“password”) val loginButton = Button(“login”) init { val binder = Binder() binder.forField(name).bind( { it.username }, { bean, value -> bean.username = value }) //… } […]
我正在尝试使用swig为c ++类生成java包装(所以我可以在Kotlin中使用它们)。 我能够生成Java类和JNI共享模块,但是我有问题导入包中的想法。 这是我做的。 首先我使用下面的代码生成封装代码: ../../swig/bin/swig -module wvx -c++ -java -package wvx -outdir out java_interface.i 编译它使用: gcc -shared -fpic -c java_interface_wrap.cxx -I. -I/bunch-of-paths 链接使用: g++ -lpthread -lrt -lgmp -ldl -lcrypt -lm -lc -lieee -shared -fpic java_interface_wrap.o bunch_of_dependencies.a -o libwvx.so 我现在有libwvx.so文件,我可以加载目录到我的LD_LIBRARY_PATH后加载 System.loadLibrary(“wvx”) 接下来,我进入了所有的swig生成的java文件的出口目录,并编译所有使用。 javac *.java 并用下列方法将它们打包成一个jar子 jar cf wvx.jar *.class 最后在我包含的build.gradle文件中。 dependencies { compile files(‘/path_to_jar/wvx.jar’) } […]
我想从一些kotlin代码调用Java方法 val list: List = emptyList() repository.find(list) // this call goes to a java class IntelliJ通知我有关types不匹配: types不匹配。 Required:(Mutuable)Set find:列表 在Java中我的方法签名: void find(@Nonnull Set list); 我知道这样做不好, 根据文档 ,我可以在Kotlin中使用MutableList 。 但是我也完全控制了Java代码,并希望更改Java代码以使用Kotlin的List 。 Java方法签名如何接受Kotlin的List? 顺便说一句:是IntelliJ告诉我Required: (Mutuable)Set ? 什么是感叹号?
我写了3个简单的程序来测试协程在线程上的性能优势。 每个程序都做了很多简单的计算。 所有的程序都是分开运行的。 除了执行时间外,我还通过Visual VM IDE插件测量了CPU的使用情况。 第一个程序使用1000-threaded池进行所有计算。 由于频繁的上下文更改, 64326 ms代码显示了最差的结果( 64326 ms ) val executor = Executors.newFixedThreadPool(1000) time = generateSequence { measureTimeMillis { val comps = mutableListOf<Future>() for (i in 0..1_000_000) { comps += executor.submit { computation2(); 15 } } comps.map { it.get() }.sum() } }.take(100).sum() println(“Completed in $time ms”) executor.shutdownNow() 第二个程序具有相同的逻辑,而不是1000-threaded池,它只使用n-threaded池(其中n等于机器内核的数量)。 它显示更好的结果( 43939 ms […]
我有一个奇怪的问题,我有一个Android的初始登录活动,而它的onCreateMethod,被触发,我被Object类调用,这是一个名为BaseData的静态对象。 我得到一个奇怪的空错误,而它的一个对象。 发现对象在Kotlin中被延迟加载需要一段时间,我如何强制它首先加载,并在我的主登陆登录活动创建时可用。 class LoginActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { if(BaseData.userId == “”) { //At this step BaseData itself comes as null, so app goes blank //Do something } } } object BaseData : Observable() { var initialSyncDone:Boolean = false var isOffline:Boolean = true var userId: String = “” init{ // I […]
当我试图执行附图中的代码时,我总是收到“未解析的引用:FacebookCallback”错误。 我正在尝试按照以下链接指示设置Facebook登录: https : //developers.facebook.com/docs/facebook-login/android#addbutton 我是Kotlin的新手,但我看不出我在这里做错了什么。 编辑: 这是我的gradle文件: apply plugin: ‘com.android.application’ apply plugin: ‘kotlin-android’ apply plugin: ‘com.neenbedankt.android-apt’ android { compileSdkVersion 24 buildToolsVersion “24.0.0” defaultConfig { applicationId “yetti.yetti” minSdkVersion 23 targetSdkVersion 24 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ } } sourceSets { main.java.srcDirs += ‘src/main/kotlin’ androidTest.java.srcDirs […]
我有几百个Java类实例,都需要在10分钟内完成.calculate()方法或死亡。 他们会抓住CPU和内存,所以我想只允许5(线程?)一次。 我相信我很接近,但来自Java背景我还不够熟悉kotlin协同程序(vs java ExecutorServices)来进行编译。 // …my logic to create a stream of identical class type instances // that all have a vanilla blocking .calculate():Double method… // which I now want to (maybe?) map to Jobs listOf(MyClass(1), MyClass(2), MyClass(1000)) .map { launch(CommonPool) { val errorRate: Double? = it?.calculate() println(“${it?.javaClass?.simpleName} $errorRate”) // desired output errorRate } […]
在Kotlin M13中,这是创建JUnit规则的可接受的方法: @Rule @publicField val temp = TemporaryFolder() 既然@publicField已经被弃用了,那么还能如何实现呢? IDE的提示建议用@publicField替换@publicField ,但是不能再lateinit val的,我不确定这会有帮助。
是否有可能定义一个通用的指数运算符,可以这样接口: > 10^3 // 1000 > 2.71^2 // 7.3441 > 3.14^(-3.14) // 0.027.. 根据文档,可以使用中缀函数来扩展类: // Define extension to Int infix fun Int.exp(exponent: Int): Int { … } 但是他们不允许像^这样的符号