首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kotlin错误: Dagger不支持向私有字段注入

Kotlin错误: Dagger不支持向私有字段注入
EN

Stack Overflow用户
提问于 2017-11-08 19:03:10
回答 12查看 34.1K关注 0票数 65

我在kotlin活动中使用ViewPager,我想在Kotlin片段中使用匕首注入。我有错误:匕首不支持注入私有字段。在Java片段中,匕首注入工作。为什么我不能在科林农场注射匕首?

在我的kotlin活动中

代码语言:javascript
运行
复制
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片段

代码语言:javascript
运行
复制
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
}

}

消息级构建

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2017-11-08 19:08:24

我无意中找到了自己的答案,不得不承认,它实际上不起作用(至少对我的用例来说是这样)。请考虑一下为我工作过的阿维里奥的回答:用lateinit代替internal

旧答案

删除internal修饰符。匕首至少需要包-私有访问,以访问带注释的字段。在Kotlin中,internal修饰符是而不是,它替代了的包-私有访问修饰符。

要详细解释Java和Kotlin中修饰符之间的差异,请参阅片段播客的第101集 --“学习Kotlin --可见修饰符、内部修饰符、模块”以及官方文件

票数 60
EN

Stack Overflow用户

发布于 2018-01-23 20:12:37

你搞错了:

代码语言:javascript
运行
复制
    @Inject
internal var mSharedPreferences: SharedPreferences? = null

这看起来像是将@Inject注释添加到KotlinFragment类中。

请更改为此,它将起作用:

代码语言:javascript
运行
复制
var mSharedPreferences: SharedPreferences? = null
        @Inject set

下面是指向文档的链接:https://kotlinlang.org/docs/reference/annotations.html

票数 70
EN

Stack Overflow用户

发布于 2018-09-15 06:23:02

只要您能做到这一点,就可以更改这一行

代码语言:javascript
运行
复制
@Inject
internal var mSharedPreferences: SharedPreferences? = null

代码语言:javascript
运行
复制
@set:Inject
internal var mSharedPreferences: SharedPreferences? = null

在我的情况下,这件事很有魅力。

票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47187657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档