当前位置: 首页 > 知识库问答 >
问题:

如何在内部类中定义常量?

常坚
2023-03-14

我有以下Java代码,我想将其转换为Kotlin:

class RideHistoryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    class HistoryItemHolder extends RecyclerView.ViewHolder {
        private static final int TYPE_IN_PROGRESS = 1
        private static final int TYPE_CANCELLED = 2
        private static final int TYPE_FINISHED = 3

        // class methods and properties are written
    }
}

我想出了以下代码:

class RideHistoryAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    private inner class HistoryItemHolder(view: View)
        : RecyclerView.ViewHolder(view) {
        private companion object {
            private const val TYPE_IN_PROGRESS = 1
            private const val TYPE_CANCELLED = 2
            private const val TYPE_FINISHED = 3

            // class methods and properties are written
        }

    }

}

Android Studio正展示着一个红色的“对象”下方歪歪扭扭的行伴侣对象,上面写着:

此处不允许同伴对象

注意:我知道我可以将它转换为非内部类,但我更愿意保留它一个。我还检查了我不能在内部类中定义接口。

共有1个答案

梁楷
2023-03-14

首先,您的Java是无效的。如果修复了它,则会得到一个错误:内部类不能具有静态声明

内部类中不能有伴生对象,原因与java中的内部类中不能有static成员相同

https://docs.oracle.com/javase/tutorial/java/javao/nested.html:

与实例方法和变量一样,内部类与其封闭类的实例相关联,并可以直接访问该对象的方法和字段。此外,由于内部类与实例关联,因此它本身不能定义任何静态成员。

(由我突出显示)

  1. 使用val(类似于final)。
  2. 将同伴对象移动到封闭类中。
  3. 使HistoryItemHolder不是内部类。
 类似资料:
  • 问题内容: 假设您需要定义一个仅包含常量的类。 这样做的首选方式是什么? 接口 抽象类 最终班 我应该使用哪一个?为什么? 澄清一些答案: 枚举 -我将不使用枚举,我不会枚举任何东西,只是收集一些彼此不相关的常量。 接口 -我不会将任何类设置为实现该接口的类。只是想使用该接口来调用常量,例如:。 问题答案: 使用期末课程。为简单起见,您可以使用静态导入在另一个类中重用您的值 在另一堂课中:

  • 骡子流曰: HTTP和CXF组件公开了给出两个整数之和的web服务。发送入请求的对象为: 公共类AddValues{private int a;private int b;public setA(int a){this.a=a;}public getA(){return a;}public setB(int b){this.b=b;}public getB(){return b;}} 有人能建议一

  • 问题内容: 我已经看到了几个与Java中类似的示例,希望有人可以解释发生了什么。似乎可以内联定义一个新类,这对我来说真的很奇怪。 第一行是预期的输出行,因为它只是toString。但是第二似乎函数可以内联重写。 为此有技术术语吗? 还是任何更深入的文档? 如果我有以下代码: 代码输出: 问题答案: 它是一个匿名内部类。您可以在Java文档内部类链接中找到有关它的更多信息。 编辑 我正在添加一个更好

  • 问题内容: 很简单,我正在学习Python,但是找不到可以告诉我如何编写以下内容的参考: 后来: 这是一个具有以下属性的班级团队:名称/徽标/成员 编辑 经过几次尝试,我得到了: 后来 这是Python方式吗?感觉很奇怪(当然来自强类型语言)。 问题答案: 在Python中,通常不编写getter和setter,除非您确实为它们提供了一个简单的实现(此时使用属性描述符)。

  • 问题内容: 我想创建一个类,作为的内部类,但是我想写下外部文件。 我怎样才能做到这一点? 这将是很多内部类,而文件将是 巨大的 。 更新 我真正想做的是定义十个类,它们只能由一个类访问。所有这些都在同一包内定义。 谢谢。 问题答案: 将所有类放入包中,并将这些类定义为包私有。 注意没有关键字吗?如果创建类Hello的实例在包中,则您将只能创建该实例的实例。

  • 我只是想学习Angular 2(特别是Angular 8),就我的一生而言,我不明白为什么类变量在类函数中是“未定义”的,但如果我用ES6风格编写函数,它是可以访问的。 我尝试在构造函数中设置,但这没有意义。 一旦调用HandleClickStart,每1.5秒输出一次NaN。为什么????我本以为是1 2 3...... 通过这种方式实现handleClickStart,可以获得预期的结果: 但