【问题标题】:java.lang.IllegalStateException: SimpleTypeImpl should not be created for error typejava.lang.IllegalStateException:不应为错误类型创建 SimpleTypeImpl
【发布时间】:2019-01-14 11:26:33
【问题描述】:

迁移到 AndroidX 后一直遇到此错误。

java.lang.IllegalStateException: SimpleTypeImpl should not be created for error type: ErrorScope{Error scope for class <ERROR CLASS> with arguments: org.jetbrains.kotlin.types.IndexedParametersSubstitution@14ac19e7}

这个link 没有多大帮助

【问题讨论】:

  • 确保您更新了所有内容:IDE、Gradle、Kotlin 版本、Kotlin IDE 插件等。我相信我曾经有过这个,它与 IDE/插件相关。
  • 我也看到了这个!你能解决这个问题吗?
  • @UtkarshBarsaiyan 即使在从 Android Studio 选择迁移到 AndroidX 之后,我也必须手动进行更改,我意识到直到一切都是最新的(版本、IDE、gradle、代码等),这个错误不会消失.
  • 我发现java.lang.IllegalStateException 行之后的下一行给出了有问题的类的名称。就我而言,我在有问题的库模块中没有 gradle 依赖项(对于 rxjava)。
  • 除了@AgileNinja 的建议,我的错误是输出[ERROR: Response&lt;T&gt;]。这是因为我从我的一个模块中删除了改造依赖项。浪费了 2 个小时……

标签: android kotlin androidx android-studio-3.2


【解决方案1】:

对我来说,错误是由于无效的import 语句而出现的。 Android Studio 没有显示任何相关内容。我不得不去每个文件,然后工作室显示无效的导入错误。修复它并且构建错误消失了。

【讨论】:

  • 搜索“导入”时,它实际上显示在每个文件的预览中,这给了我更多关于哪里出错的线索。
  • 确实是缺少进口是我这边造成的。如果您不想检查每个文件都检查丢失的导入,请使用 Analyze > Inspect Code 菜单。
  • 对我来说,这是一个类似的问题。此外,导入是在一个测试文件中,我过去观察到,在它们运行或打开之前不会得到 IDE 的编译器检查......
  • 类似的问题。感谢您的体验。
  • @pablisco 你拯救了我的一天。我丢失的导入语句确实位于测试文件中
【解决方案2】:

我按照以下步骤解决了这个问题。

1-将 android studio 从 4.1.1 更新到 4.2.1

2-更新 gradle-warepper.properties 文件中的以下行

distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip

3- 更新一些 kotlin 扩展,如下所示

buildscript {
    ext.kotlin_version = '1.3.72'

buildscript {
    ext.kotlin_version = '1.4.32'

 dependencies {
        classpath 'com.android.tools.build:gradle:4.0.1'

dependencies {
        classpath 'com.android.tools.build:gradle:4.2.1'

gradle 同步等需要一些时间,但我终于在折腾了一整天后解决了这个问题。

【讨论】:

    【解决方案3】:

    我刚刚在 root build.gradle 中更新了我的 kotlin-gradle-plugin 版本,它解决了我的问题

    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.72"
    

    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32"
    

    【讨论】:

      【解决方案4】:

      我更新到Kotlin 1.3.20,但还是不行。然后我决定检查Kotlin 源代码。我找到了这个link

      我有一个名为DisplayItem&lt;T&gt; 的接口,我删除了它的类型参数。在此之后,我开始收到错误。实际上,在logcat 中的错误结尾处写着DisplayItem

      所以我检查了代码中的所有DisplayItem 类型,发现我忘记删除LiveData 变量中的一个类型参数,如下所示:

      MediatorLiveData<DataHolder<List<DisplayItem<MessageViewEntity>>>>
      

      从变量中删除类型参数后,它开始编译。我希望这会对你有所帮助。

      注意:您可以使用git grep 进行快速搜索。

      【讨论】:

      • 我有很多类使用&lt;T&gt;,但我无法根据需要删除它们。还有其他解决办法吗?
      • git grep 什么?
      • 当您检查日志时,它会显示类型。您应该 grep 类型并检查您错过了哪个类型以删除类型参数。
      • @IgorGanapolsky 在我的情况下,有问题的损坏类是Event&lt;Boolean,所以我寻找grep -rin 'Event&lt;Boolean&gt;' *,我发现一个导入错误的ViewModel。上帝保佑,我的朋友。
      • 这可能晚了。但在我的情况下搜索 LiveData 我发现一些模板指的是不存在的类型
      【解决方案5】:

      我解决此问题的主要提示是,当您收到错误消息却不知道真正的错误在哪里时,请尝试使用 Android Studio 分析/检查代码选项。通过挖掘输出,我发现了触发问题的实际编译错误,然后可以轻松修复它们。

      在我的案例中,实际问题是将具有嵌套类的泛型类更改为抽象类并创建两个子类来替换它以前的用法。我仍然有我的代码对原始抽象基类的引用,我应该用两个新的子类之一替换它们。

      【讨论】:

        【解决方案6】:

        Android Studio 中的迁移到 AndroidX 选项没有多大帮助。我通过手动更改每个文件解决了这个错误,在代码和 xml 中都根据 AndroidX 更改了包名称。如果任何文件未更改,您将看到此错误。请确保您的 Kotlin 插件版本、gradle 插件版本、构建工具和 Android Studio 版本是最新的。

        【讨论】:

          【解决方案7】:

          将您的 Kotlin 依赖项升级到 1.3.20,编译器将突出显示问题的根源。

          【讨论】:

            猜你喜欢
            • 2020-08-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多