在Kotlin中,如果要使用forEach的元素,则可以使用it关键字。 所以现在我想知道如果我有一个forEach里面forEach ,我该怎么做: list.forEach { val parent = it it.forEach { // `it` now become the element of the parent. } } 我认为只为命名约定定义一个新的变量是如此愚蠢。 有任何其他的解决方案,这个问题?
好的,在我开始解释我的问题之前,我希望你知道我知道背后的设计思想,它不打算在字段或集合中使用,但我已经在Kotlin中编程了很多,真的不喜欢使用null 。 所以我有一个类似于虚幻引擎的基于节点的编辑器 ,每个节点都有ConnectionBox es,它们可以是空闲的,或者被Connection占用。 所以有不同的方法来表达这个使用映射每个ConnectionBox到一个Connection地图: Map<ConnectionBox, Connection> connectionEndPoints; 如果ConnectionBox是空闲的,则Connection可以为null 。 我不喜欢这样,因为其他开发人员不知道这个Map的功能,并且它可能会返回null现有的ConnectionBox 。 所以我很想用一个: Map<ConnectionBox, Optional<Connection>> connectionEndPoints; 显示打算更好,你甚至可以读取它像: “这个ConnectionBox可能ConnectionBox了一个Connection 。” 我的问题是:为什么我不应该这样做,尽管它显示的意图要清楚得多,并且阻止了NPE 。 每个SO-thread和每个博客文章都说这是不好的风格,甚至编译器都说我不应该这样做。 根据要求,这是一个SO线程,不鼓励使用Optional作为字段或集合值: 用于可选 这里是警告(事实证明这是来自IntelliJ的警告): 警告:可选用作字段{fieldName}的类型 确定后,建议Connection参考应该在ConnectioBox的问题只是转移。 为什么是: class ConnectionBox { Optional<Connection> connection; … 比…更差 class ConnectionBox { Connection connection; //may be null … 除非我发表评论,否则你不能看到你可能遇到NPE ,我不喜欢解释代码的评论,可以解释自己。
以下泛型不能编译。 这里的语义错误是什么? 函数调用 start(MainActivity.javaClass) // <== Doesn't compile 方法定义 // Definition public fun <T : Activity> start(activityClass: Class<T>) { startActivity(Intent(this, activityClass)) } 编译器错误 Error:(43, 9) Type parameter bound for T in fun <T : android.app.Activity> start(activityClass: java.lang.Class<T>): kotlin.Unit is not satisfied: inferred type com.mobsandgeeks.hellokotlin.MainActivity. <class-object-for-MainActivity> is not a subtype of android.app.Activity
我尝试从我的终端执行命令:./gradlew testfairyDebug。 这将返回下一个错误: 失败:生成失败,出现异常。 出了什么问题:执行失败的任务':app:testfairyDebug'。 无法获取com.android.build.gradle.tasks.PackageApplication类型的任务':app:packageDebug'的未知属性'outputFile'。 你有什么想法来解决这个问题。 有关信息,我在Android Studio 3上工作,我的gradle版本是'com.android.tools.build:gradle:3.0.0-alpha6' 我的build.gradle: // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.2-4' repositories { maven { url 'https://maven.google.com' } maven { url 'https://www.testfairy.com/maven' } jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-alpha6' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.testfairy.plugins.gradle:testfairy:1.+' // NOTE: Do […]
有朋友告诉我,在实践/行业中我们应该写: Map<Class1, Class2> map = new HashMap<>(); 代替 Map<Class1, Class2> map = new HashMap<Class1, Class2>(); 这种编码风格有什么特别的原因吗?
我有一个recyclerview,当用户刷新刷新时,我想更新。 这是我的MainActity.kt class MainActivity : AppCompatActivity(), LoaderManager.LoaderCallbacks<List<Coin>> { private val mCoinLoaderId = 1 private val mCoinEndpointUrl = "http://coincap.io/front" private var swipeRefreshLayout: SwipeRefreshLayout? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) swipeRefreshLayout= findViewById<SwipeRefreshLayout>(R.id.swipe_refresh_layout) as SwipeRefreshLayout rv_coins.layoutManager = LinearLayoutManager(this) rv_coins.setHasFixedSize(true) runLoaders() swipeRefreshLayout?.setOnRefreshListener{ // This method performs the actual data-refresh operation. // The method calls setRefreshing(false) when […]
所以这可能是相当混乱的解释,所以我会尽我所能。 所以我一直在这个listView加载一个id(名字)从firebase-firestore,我已经工作了。 我已经做的下一步是,在同一个列表上创建一个按钮,用不同项目的微调器打开一个新的活动。 从那个微调我选择了我的许多项目(从我的firebase-firestore),然后我把它们添加到列表中。 现在,我试图做的和没有管理的是:有一个创建按钮来创建我刚刚创建的列表。 我需要在Firebase-firestore上创建一个文档,然后添加我决定给这个列表的第一个名字(带有Button来创建列表的名字)。 我现在该如何手动完成这个工作:就像在我自己创建列表一样,并且从列表中有一个项目打开基于传递意图的某个活动,但这是手动完成的。 我需要它自动化,如果你知道我的意思。 这是流量(认为它会让事情变得更容易理解): 谢谢
我使用Spek作为测试框架,并且在共享基类的一些测试步骤时遇到麻烦。 我有一个抽象基类和两个派生类。 abstract class Base { abstract fun send() } class Foo : Base() { override fun send() {} fun anotherFunction() { } } class Bar : Base() { override fun send() {} fun differentFunction() { } } 现在我的问题是:如何为这些分类创建Speks,但只在基本spek中定义一次send()的测试? 我的第一个方法是使用SubjectSpek class BaseSpek : SubjectSpek<Base>({ subject { // ??? Can't instantiate Base because it is abstract […]
在设备中安装新的其他应用程序时,我想在应用程序中执行一些操作。 有什么办法可以做到吗? TIA
FooActivity.kt : class FooActivity : AppCompatActivity(), LifecycleRegistryOwner { override fun getLifecycle(): LifecycleRegistry { return LifecycleRegistry(this) } .. // <– here mViewModel is null mViewModel.getBar().observe(this, Observer<List<String>> { override fun onChanged(bar: List<String>) { // Never triggered } }) mViewModel.init() // <– here mViewModel has changed } mViewModel被确认改变。 然而观察者的onChanged从来没有被调用。 问题 :为什么不起作用? 编辑 : FooViewModel.kt : class FooViewModel(application: Application) […]