Kotlin 中的“宁愿在该类上运行匕首处理器”

Posted

技术标签:

【中文标题】Kotlin 中的“宁愿在该类上运行匕首处理器”【英文标题】:"Prefer to run the dagger processor over that class instead" in Kotlin 【发布时间】:2016-04-29 06:06:14 【问题描述】:

每当我对 kotlin 类进行注入时,我都会在构建中收到此注释(顺便说一句,我有一个包含 kotlin 和 java 的混合 android 项目)。

例如,在这个 gradle 任务之后:compileStagingDebugJavaWithJavac(StagingDebug 是我的构建变体),我收到这条消息:

“注意:为 com.packageNameXXX.CourseDiscoveryMapFragment 生成 MembersInjector 或 Factory。更喜欢在该类上运行 dagger 处理器。”

我的CourseDiscoveryMapFragment代码可以在这里看到:

class CourseDiscoveryMapFragment : Fragment()

    @Inject
    lateinit var presenter: CourseDiscoveryMapPresenter

    lateinit var mapView: MapView

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? 

        val view = inflater.inflate(R.layout.fragment_discovery_map, container, false)

        MapsInitializer.initialize(activity)

        mapView = view.mapView
        mapView.onCreate(savedInstanceState?.getBundle(BUNDLE_KEY_MAP_STATE))

        (activity as BaseActivity)
                .activityComponent.inject(this)

而我的 ActivityComponent 是:

@ActivityScope
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent 

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

    //Exposed to sub-graphs.
    Activity activity();

所以,我正在使用 Java 编写 dagger 组件和模块,同时在 Kotlin 中进行 dagger 注入。

这是我应该担心的事情吗?

谢谢。

【问题讨论】:

你能发布整个错误/警告以及与之相关的代码吗? 这个问题需要更多细节。你基本上写了一个谷歌查询作为一个问题。 @marcospereira 重新编辑!谢谢! 嘿,您找到解决方案了吗?或者该警告的原因? 这里是答案:github.com/square/dagger/issues/537 【参考方案1】:

恐怕你不能。为什么不在 Kotlin 中编写依赖模块?

要在java中编写依赖模块,你需要这样配置你的Gradle脚本:

 compile 'com.google.dagger:dagger:2.8'
 apt 'com.google.dagger:dagger-compiler:2.8'

但是,要在 Kotlin 中编写依赖模块,您应该以这种方式配置 Gradle 脚本:

compile 'com.google.dagger:dagger:2.8' 
kapt 'com.google.dagger:dagger-compiler:2.8'

dagger在编译过程中需要注解处理工具生成依赖代码。所以我猜你只需要根据正确的语言使用正确的APT(注释处理工具)。

【讨论】:

以上是关于Kotlin 中的“宁愿在该类上运行匕首处理器”的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 实现在任何处垂直带气泡Attach弹窗(未超屏)的功能

Kotlin TickerModes之间的区别

Kotlin 协程协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )

Kotlin 协程协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )

kotlin list的问题

Kotlin---------------基础类型