java - 该嵌套类的实际目的是什么?

标签 java

我是 Android 编程新手,对以下代码没有什么困惑。 这部分代码来自android开发者网站:

public final class FeedReaderContract {
    // To prevent someone from accidentally instantiating the contract class,
    // give it an empty constructor.
    public FeedReaderContract() {}

    /* Inner class that defines the table contents */
    public static abstract class FeedEntry implements BaseColumns {
        public static final String TABLE_NAME = "entry";
        public static final String COLUMN_NAME_ENTRY_ID = "entryid";
        public static final String COLUMN_NAME_TITLE = "title";
        public static final String COLUMN_NAME_SUBTITLE = "subtitle";
        ...
    }
}

我在 Java 文档和其他一些博客中阅读了一些有关嵌套类的文章,并了解了使用嵌套类的以下原因:

  1. 提供更好的封装。
  2. 如果一个类只与另一个类相关,那么我们最好制作这两个类的嵌套类。

但是在这里,我想不出任何可以使用嵌套类的东西。

创建嵌套类的目的到底是什么?

最佳答案

这个特定的嵌套类用作与其主类相关的String常量的命名空间

  • 它是抽象,因此不适合实例化
  • 它实现了 BaseColumns 接口(interface),该接口(interface)本质上是一种将字符串常量“转储”到 FeedEntry 类中的方法

Why did they used nested class instead of free-standing class?

使用嵌套类强调内部类与其外部类的“语义接近性”。它向代码的读者传达了 FeedEntry 只能在 FeedReaderContract 上下文中进行解释。否则,FeedEntry 就没有意义。本质上,这是为代码的人类读者完成的,因为在这种情况下,编译器不会有任何区别。

关于java - 该嵌套类的实际目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31002706/

相关文章:

Java 代码在 App 中运行,而不是在 Servlet 中运行

java - eureka 中所有注册微服务的 swagger 配置

java - 在 maven 测试运行中执行时,使用 Spring 注释进行测试会导致 ClosedByInterruptException

没有迭代器的Java列表删除

java - Hibernate - 如何持久化 HashMap

java - 等效于 iOS Swift 中的 Java 接口(interface)回调

java - Maven 可以从私有(private) s3 存储桶引用父 POM 吗?

java - 有没有办法将 Gradle/Cucumber/Selenium 测试集成到 Browserstack (Java) 中?

java - 如何将 "_INC"(String) 附加到列表中每个元素的末尾?

Java 兼容性 - 导入使用更新的 java 构建的类