web-dev-qa-db-ja.com

Kotlinの「代わりにそのクラスよりも短剣プロセッサを実行することをお勧めします」

私はkotlinクラスにインジェクトするたびにビルドでこのノートを取得しています(ところで、Androidプロジェクトが混在しています)。

たとえば、このgradleタスク:compileStagingDebugJavaWithJavac(StagingDebugは私のビルドバリアントです)の後、次のメッセージが表示されます。

「注:com.packageNameXXX.CourseDiscoveryMapFragmentのMembersInjectorまたはFactoryを生成します。代わりにそのクラス上で短剣プロセッサを実行することをお勧めします。」

私の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で書かれた短剣コンポーネントとモジュールを持ち、Kotlinで短剣注入を持っています。

これは私が心配すべきことですか?

ありがとうございました。

122
Fábio Carballo

私はあなたができないことを恐れています。 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(注釈処理ツール)を使用するだけでよいと思います。

5
Jacob