我试图使用kotlintest与spring(不是春季启动,只是标准的春季测试)。 我觉得这很难做到。 任何指针,我在做什么错? 我也是Kotlin的新手,所以我可能不会做正确的事情。 这是我迄今为止所尝试的: import io.kotlintest.matchers.shouldBe import io.kotlintest.specs.BehaviorSpec import org.junit.ClassRule import org.junit.Rule import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.test.context.ContextConfiguration import org.springframework.test.context.junit4.rules.SpringClassRule import org.springframework.test.context.junit4.rules.SpringMethodRule open class SomeBean { open fun sayHello() = “Hello” } @Configuration open class TestConfig { @Bean open fun someBean(): SomeBean = SomeBean() } @ContextConfiguration(classes = arrayOf(TestConfig::class)) open class MyTests(var someBean: SomeBean) : […]
我尝试运行下面的代码,但代码无法通过编译,我得到的错误: 智能投“长”是不可能的,因为’我’是一个可变的财产,可能已经改变了这个时间 为什么? class MyClass1(var i: Long?) { fun change(): Long? { if (i != null) { return i + 10L } else { return 5L } } } 我用Java写了代码MyClass2,它可以很好地工作,为什么? class MyClass2{ private Long i; public MyClass2(Long k){ i=k; } public Long change(){ if (i!=null){ return i+10L; }else { return 5L; } } }
鉴于Java中的这个自定义SQLiteOpenHelper : public class ExamplesOpenHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 1; private static final String DATABASE_NAME = “app.db”; private static final String CREATE_TABLE_STATEMENT = “CREATE TABLE examples (_id INTEGER PRIMARY KEY, NAME TEXT);”; public ExamplesOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_STATEMENT); } @Override […]
我有一个像下面这样的抽象类: abstract class AbstractSync<out C : Configuration> : ISync { internal abstract val configuration: C … } 我想要另一个inheritance自这个的抽象类: abstract class CascadedSync : AbstractSync {} CascadedSync类不应修改通用参数C,实际上它只应实现一个ISync的方法,而不是其他的方法。 我正在尝试不同的语法来实现这个看似简单的任务。 在Java中,这看起来就像这样: abstract class CascadedSync extends AbstractSync { } 在IntelliJ的帮助下将其翻译成Kotlin会产生如下结果: abstract class CascadedSync : AbstractSync() 但在同一时间给出了以下错误: 不允许对超types的直接子types进行投影 什么是正确的语法?
我试图使用反应本地animationAPI的一些头像animation像这样: https : //yalantis.com/blog/toolbar-jelly-animation-kotlin-android/ 我设法使用Animate.timing和一些缓动函数来转换SVG组件 ,但是我对这些基本的缓动函数并不满意,并且想要自己做这样的缓动函数 。 我可以这样做吗?
我试图从我的实时数据库显示一些数据到一个回收适配器没有运气。 我已经使FirebaseRecyclerAdapter在另一个活动(java)上工作,但在这一个上它不起作用(kotlin)。 奇怪的是,如果我使用ValueEventListener,数据返回就好了,但是FirebaseRecyclerAdapter不起作用。 类: class FriendsActivity : AppCompatActivity() { private lateinit var friendsDb: DatabaseReference private var currentUser: FirebaseUser? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_friends) supportActionBar?.title = “Friends” friends_main_rec.layoutManager = LinearLayoutManager(this) friends_main_rec.setHasFixedSize(true) currentUser = FirebaseAuth.getInstance().currentUser friendsDb = FirebaseDatabase.getInstance().reference.child(“FRIENDS”) .child(currentUser!!.uid) val friendsRecyclerViewAdapter = object : FirebaseRecyclerAdapter( Friends::class.java, R.layout.friend_single, FriendsViewHolder::class.java, friendsDb) { override fun populateViewHolder(viewHolder: […]
当从Kotlin调用一个不可为空注释的Java函数时,我们得到灵活types的返回值,用感叹号表示,例如String! 。 Kotlin默默地允许将这些灵活的值分配给一个正常的非空types,例如String ,在运行时可能会导致NullPointerExceptionexception。 我宁愿为这样的任务得到编译器警告或错误。 或者,将平台types视为等价于可空types(例如String? )。 作为一个例子,用这个Java代码: import android.os.SystemClock; import android.support.annotation.NonNull; import android.support.annotation.Nullable; public class NullTest { private String maybe() { if (SystemClock.elapsedRealtimeNanos() % 2 == 0) { return null; } return “ok”; } public String annotatedNothing() { return maybe(); } @Nullable public String annotatedNullable() { return maybe(); } @NonNull public String annotatedNonNull() { […]
有没有可能从Java代码访问扩展函数? 我在Kotlin文件中定义了扩展function。 package com.test.extensions import com.test.model.MyModel /** * */ public fun MyModel.bar(): Int { return this.name.length() } MyModel是一个(生成的)java类。 现在,我想在我的正常的java代码中访问它: MyModel model = new MyModel(); model.bar(); 但是,这是行不通的。 IDE将无法识别bar()方法,编译失败。 kotlin的静态函数使用了什么工作: public fun bar(): Int { return 2*2 } 通过使用import com.test.extensions.ExtensionsPackage所以我的IDE似乎配置正确。 我搜索了kotlin文档中的整个Java-interop文件,也搜索了很多,但是我找不到它。 我究竟做错了什么? 这甚至有可能吗?
假设我有一个 val s: String = “14ABC5” 并有一个HashMap val b: HashMap = hashMapOf(“A” to “10”, “B” to “11”, “C” to “12”, “D” to “13”, “E” to “14”, “F” to “15” ) 我将如何在保持顺序(“1”,“4”,“10”,“11”,“12”,“5”)的同时,将10,11,12中的所有A,B, 到目前为止,我有这个 val result: List = s.toUpperCase().toCharArray().map{ it.toString() }.map{ it -> b.getValue(it)} 如果String所有字符都存在于HashMap但是我的String也可能包含不存在的键,这将起作用。
使用房间+ LiveData + Dagger2 + Kotlin 分贝代码: @Database(entities = arrayOf(MonthlyBudget::class, Purchase::class), version = 1, exportSchema = false) @TypeConverters(DateTypeConverter::class) abstract class AppDatabase : RoomDatabase() { abstract fun budgetDAO(): BudgetDAO abstract fun purchaseDAO(): PurchaseDAO } 在提供db的dagger2中的方法 @Provides fun providesAppDatabase(context: Context): AppDatabase = Room.databaseBuilder(context, AppDatabase::class.java, “my-budget-db”).allowMainThreadQueries().build() 在匕首2中返回null的方法 @Provides @Singleton @Named(“CurrentMonthBudget”) fun provideCurrentMonthBudget(repository: AppRepository): MonthlyBudget = repository.currentMonthBudget() 对象的注入 @Inject […]