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