为啥我无法访问会员?

Posted

技术标签:

【中文标题】为啥我无法访问会员?【英文标题】:Why I cannot access a member?为什么我无法访问会员? 【发布时间】:2014-07-04 22:52:42 【问题描述】:

我定义了以下类:

public static class Solution
   ....

在类解决方案中,我定义了两个内部类:

public static class Solution
   public static class Node
     int id;
     public double x;
     public double y;
   
   public static class Tree<Node>
     Node root;
     boolean contains(Node n)
         if (n == null)
            return false;
        if (n.x == root.x && n.y == root.y)
            return true;
        else
            return ....; //something else
   

问题是我无法访问对象nrootyx 字段,我不明白为什么? 编辑:我无法分离 Node 类,因为我正在为 Top Coder 编写它,我只需要提交一个类;字段 x 和 y 设置为公开,但我仍然无法访问它们。

【问题讨论】:

你也可以做一件事。在Solution类外面定义Node类,然后试试看是否可行。 你试过Tree&lt;Solution.Node&gt;Solution.Node root;吗?如果没有看到您的导入(您没有包含),我无法验证您没有导入另一个 Node 类。 也可以试试import Solution.Node; 虽然我不能确定测试。 【参考方案1】:

因为您使用通用 Node 隐藏了 Node 类(此处为:Tree&lt;Node&gt;)。

<T extends Node>

所以它知道它扩展了 Node 你传递给它的东西(并且知道它有 x 等)

【讨论】:

这毫无意义。他们应该把T extends Node放在哪里? T 会做什么? 是泛型,T是泛型的通用名称。 T 会说“每个扩展 Node 的类”,所以 Node 没问题。请阅读:docs.oracle.com/javase/tutorial/java/generics 记住在 中你声明了泛型 NOT THE TYPE 的名称! 我明白什么是泛型。我不知道他们将如何帮助解决 OP 的问题。 我相信这是正确的答案。如果 OP 将 public static class Tree&lt;Node&gt; 替换为 public static class Tree&lt;N&gt; 我猜它会更明显。 因为在泛型中,你的代码基本上是在说In class Tree, there is an unknown type 'Node' (not related to your previous class definition). 它不是基于任何东西,所以它的共同父级是Object。现在,传递给contains 方法的对象假定为Objects,因此没有xy。 Marco 的回答告诉您,您需要定义一个类型 T(替换 Node),它基于 Node,使传递的对象具有共同的祖先Node ,从而使您可以访问xy

以上是关于为啥我无法访问会员?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Charles 应用关闭时无法访问网站?

为啥我收到“由于保护级别而无法访问”错误?

为啥我无法访问在 ngOnInit 上设置的对象

为啥无法访问 Django 基本 URL?

为啥我无法访问我的控制器?

为啥我在 Java 中出现无法访问的语句错误?