在Java中使用相同的内部类名和对象名

2023-12-19

在下面的代码片段中,大概看起来应该会发出一些编译错误,但事实并非如此:

class Outer {
    public static class Inner {
        static String obj = "Inner";
    }

    static Optional Inner = new Optional();
    //The (inner) class name and the object name are same.
}

class Optional {
    String obj = "Optional";
}

public class Main {

    public static void main(String[] args) {
        System.out.println(Outer.Inner.obj);
        //Refers to the string inside the optional class
    }
}

班上Outer里面有一个名为的静态类Inner。此外,它还声明了该类的一个对象(静态)Optional (static Optional Inner = new Optional();)

该对象和类名称(在类内部Outer)是相同的Inner。程序显示Optional。唯一的表达Outer.Inner.obj within main()预计将显示Inner但事实并非如此。然而实际输出是Optional就是这种情况Optional class.

一种显示方式Inner是将对象名称更改为其他名称。

static Optional Inner1 = new Optional();

从它显示的输出来看,似乎是选择对象名称(或变量)而不是类型名称(类Inner)因为他们有相同的名字。这里应用的具体案例是什么?


第 6.4.2 段 http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.4.2Java 语言规范的部分内容包含有关适用于这种情况的规则的一些信息。

简单名称可能出现在可能被解释为变量、类型或包的名称的上下文中。在这些情况下,§6.5 的规则规定:将优先选择变量而不是类型,并且将优先选择类型而不是包。因此,有时可能无法通过其简单名称来引用可见类型或包声明。我们说这样的声明是obscured.

这是指段落6.5 确定名称的含义 http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.5,其中详细解释了规则。

在你的例子中,Outer.Inner可以引用名为的嵌套类的类型Inner,或静态成员变量Inner。规则规定将选择变量而不是类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Java中使用相同的内部类名和对象名 的相关文章

随机推荐

  • 后期预览 - 使用 AJAX 和 Fancybox 传递数据

    我正在尝试进行后期预览 它将出现在新的 Fancybox iframe 中 几周以来 我一直在寻找一些帮助或最佳实践 但我找不到 我的主要问题是将数据从表单 在更新数据库之前 传递到 Fancybox 窗口 我的 AJAX 技能很差 所以也
  • wp_dequeue_script 用于子主题替换脚本

    我有一个子主题 我可以添加我想用来替换一些主题功能并替换一些按钮的脚本 但我无法删除旧按钮 因此它们都显示在彼此之上 如何删除父js脚本 这是我的function php为儿童主题 function replace scroll Remov
  • React-Native-Web 的视频支持

    有没有在React Native Web中播放视频的解决方案 React Native Web https github com necolas react native web https github com necolas react
  • 带有整数参数的分段 numpy 函数

    我定义分段函数 def Li x return piecewise x x lt 0 x gt 0 lambda t sin t lambda t cos t 当我评估时Li 1 0 答案是正确的 Li 1 0 array 0 540302
  • 为什么测试期间的 useParams 在带有包装器的测试环境中返回未定义?

    我现在在两个不同的代码库中看到了这一点 并且感到困惑 因为它在实际浏览器中工作正常 但在测试中却不行 如果组件使用useParamshook hook在测试中抛出错误 错误 未捕获 TypeError 无法解构属性accountId 未定义
  • Android导航组件:如何获取当前导航图的id?

    我使用嵌套导航图来确定范围并在一组片段之间共享我的视图模型 我还有一个 BaseFragment 类 它获取所需视图模型的引用 fun provideViewModel VM return if viewModelScopeGraphId
  • 使用反射获取属性值时参数计数不匹配

    我得到了参数计数不匹配我不明白的错误 我有以下代码 Type target Type GetType CPS Service DocumentType Create an instance of my target class instan
  • 未定义的方法“dragonfly_accessor”

    我是 Dragonfly 的新手 并尝试浏览 Rails 主文档页面上的设置说明 不使用活动记录 我的步骤 1 添加到Gemfile gem dragonfly gt 1 0 3 2 bundle install 3 rails g dra
  • 如何正确更新 API 11 后的通知?

    Before Notification Builder http developer android com reference android app Notification Builder html应运而生更新方式 http deve
  • 如何在 linkedin 开发者应用程序中设置“r_fullprofile”访问权限?

    我在我的应用程序中应用了一个 API 来访问需要 r fullprofile 访问权限的 linkedin 推荐 在 linkdin api 升级之前 它工作正常 但现在 linkedIn 应用程序不提供设置完整配置文件访问权限 这就是我的
  • ARM 上 TLS 的代码序列

    The 线程本地存储的 ELF 处理 http www akkadia org drepper tls pdf文档给出了各种架构的各种模型 本地执行 初始执行 一般动态 的汇编序列 但 ARM 不行 有什么地方可以看到 ARM 的此类代码序
  • 使用 ColumnText 会导致“文档没有页面”异常

    我想将文本包装在图像下方 或左侧或右侧 的矩形中 如下所示 请参阅链接 http upanh in SLk http upanh in SLk 我在代码中使用 ColumnText 来换行文本 protected void doGet Ht
  • Java 8 是否提供了重复值或函数的好方法?

    在许多其他语言中 例如 Haskell 很容易多次重复一个值或函数 例如 获取值 1 的 8 个副本的列表 take 8 repeat 1 但我在Java 8中还没有找到这个功能 Java 8的JDK中有这样的功能吗 或者相当于类似范围的东
  • 内存流为空

    我需要从不同的来源 函数 生成一个巨大的 xml 文件 我决定使用XmlTextWriter因为它使用的内存比XmlDocument 首先 发起一个XmlWriter与底层MemoryStream MemoryStream ms new M
  • 如何在 .NET 4.5 中“同时”运行这两个方法?

    我有一个方法可以执行 2独立的逻辑片段 我希望我能同时运行它们同时 并且仅在这两个子方法完成后才继续 我试图弄清楚async await语法 但我就是不明白 这是代码 public PewPew SomeMethod Foo foo var
  • 为什么我对模型实例的更改有时无法保存在 Rails 3 中?

    我有一个名为 Post 的模型 并在模型中创建了两个方法来更改字段 当调用保存时 第一个方法的更改将被保留 第二种方法的更改不会保存 我之前在其他模型中注意到过这种行为 我认为我缺少一些关于模型如何工作的基本知识 对此的任何帮助将不胜感激
  • Node-mysql插入有两个值的查询?

    这是我当前的 JavaScript var connection mysql createConnection host localhost user root password root database codify port 8889
  • Constexpr 放置新?

    C 标准明确禁止调用new在常量表达式中 N4296 第 5 20 节 expr const 条件表达式 e 是核心常量表达式 除非对 e 的求值遵循抽象机 1 9 的规则 将求值以下表达式之一 新表达式 5 3 4 该禁令 据我所知 延伸
  • 我什么时候需要三斜线参考?

    当 Anders Hejlsberg 在下面的视频中 35 00 左右谈论外部模块时 Anders Hejlsberg TypeScript 简介 http channel9 msdn com posts Anders Hejlsberg
  • 在Java中使用相同的内部类名和对象名

    在下面的代码片段中 大概看起来应该会发出一些编译错误 但事实并非如此 class Outer public static class Inner static String obj Inner static Optional Inner n