Kotlin错误:匕首不支持注入私人领域

我在kotlin活动ViewPager中使用,我想在Kotlin Fragment中使用匕首注入。 我有错误:匕首不支持注入私人领域。 在Java片段的匕首注入工作。 为什么我不能在kotlin碎片中注入匕首?

在我的kotlin活动

mPagerAdapter = object : FragmentPagerAdapter(supportFragmentManager) { private val mFragments = arrayOf(KotlinFragment(), JavaFragment()) private val mFragmentNames = arrayOf(getString(R.string.cashdocuments), getString(R.string.action_absmysql)) override fun getItem(position: Int): Fragment { return mFragments[position] } override fun getCount(): Int { return mFragments.size } override fun getPageTitle(position: Int): CharSequence { return mFragmentNames[position] } } 

我的kotlin片段

 class KotlinFragment : Fragment() { @Inject internal var mSharedPreferences: SharedPreferences? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) (activity.application as SamfantozziApp).dgaeacomponent().inject(this) } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { super.onCreateView(inflater, container, savedInstanceState) val rootView = inflater!!.inflate(R.layout.activity_absserver, container, false) return rootView } } 

消息gradle构建

在这里输入图像描述

删除internal修饰符。 匕首至少需要包私人访问才能访问带注释的字段。 在Kotlin internal修饰符不是 Java的package-private访问修饰符的替代。

有关Java和Kotlin中修饰符之间差异的详细解释,请参阅分段播客的第101集 – “学习Kotlin – 可见性修饰符,内部修饰符,模块”以及官方文档 。

你有没有在你的ApplicationComponent定义fun inject(fragment: KotlinFragment) ? 因为它看起来像你的错误信息正是这样说。

编辑:也许你没有在你的模块中提供SharedPreferences像这样:

 @Module public class AndroidModule { private final TimrApplication application; public AndroidModule(TimrApplication application) { this.application = application; } @Provides SharedPreferences provideSharedPreferences(){ return PreferenceManager.getDefaultSharedPreferences(application); } }