为啥我无法访问会员?
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
问题是我无法访问对象n
和root
的y
和x
字段,我不明白为什么?
编辑:我无法分离 Node 类,因为我正在为 Top Coder 编写它,我只需要提交一个类;字段 x 和 y 设置为公开,但我仍然无法访问它们。
【问题讨论】:
你也可以做一件事。在Solution类外面定义Node类,然后试试看是否可行。 你试过Tree<Solution.Node>
和Solution.Node root;
吗?如果没有看到您的导入(您没有包含),我无法验证您没有导入另一个 Node
类。
也可以试试import Solution.Node;
虽然我不能确定测试。
【参考方案1】:
因为您使用通用 Node
隐藏了 Node
类(此处为:Tree<Node>
)。
<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<Node>
替换为 public static class Tree<N>
我猜它会更明显。
因为在泛型中,你的代码基本上是在说In class Tree, there is an unknown type 'Node' (not related to your previous class definition).
它不是基于任何东西,所以它的共同父级是Object
。现在,传递给contains
方法的对象假定为Objects
,因此没有x
或y
。 Marco 的回答告诉您,您需要定义一个类型 T
(替换 Node
),它基于 Node
,使传递的对象具有共同的祖先Node
,从而使您可以访问x
和y
。以上是关于为啥我无法访问会员?的主要内容,如果未能解决你的问题,请参考以下文章