#java #class-members
#java #члены класса
Вопрос:
Я определил следующий класс:
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 amp;amp; n.y == root.y)
return true;
else
return ....; //something else
}
}
Проблема в том, что я не могу получить доступ к y
и x
полям объектов n
и root
и я не понимаю, почему?
РЕДАКТИРОВАТЬ: я не могу отделить класс Node, потому что я пишу его для Top Coder и мне нужно отправить только один класс; Поля x и y заданы как общедоступные, но я все равно не могу получить к ним доступ.
Комментарии:
1. Вы также можете сделать одну вещь. Определите класс Node вне класса Solution, а затем попробуйте, работает ли он.
2. Вы пробовали
Tree<Solution.Node>
иSolution.Node root;
? Не видя ваш импорт (который вы не включили), я не могу убедиться, что вы не импортируете другойNode
класс.3. Также можно попробовать
import Solution.Node;
, хотя я не могу проверить наверняка.
Ответ №1:
Потому что вы скрываете Node
класс с помощью универсального Node
(здесь: Tree<Node>
).
<T extends Node>
Таким образом, он знает, что расширяет узел, который вы ему передаете (и знает, что у него есть x
и т.д.)
Комментарии:
1. Это не имеет смысла. Куда они должны быть помещены
T extends Node
? ЧтоT
собираюсь делать?2. Это общее название, T — это общее название для дженериков. T скажет «каждый класс, который расширяет Node», поэтому Node в порядке. Пожалуйста, прочитайте: docs.oracle.com/javase/tutorial/java/generics Помните, что внутри <> вы объявляете имя универсального элемента, А НЕ ТИП!
3. Я понимаю, что такое дженерики. Я не понимаю, как они помогут с проблемой OP.
4. Я считаю, что это правильный ответ. Если OP заменит
public static class Tree<Node>
наpublic static class Tree<N>
, я бы предположил, что это было бы более очевидно.5. Потому что в общих чертах ваш код в основном говорит, что
In class Tree, there is an unknown type 'Node' (not related to your previous class definition).
он ни на чем не основан, так что это обычный родительский элементObject
. Теперь предполагается, что объекты, передаваемые вашемуcontains
методу, являютсяObjects
, следовательно, не имеютx
ory
. Ответ Марко говорит вам о том, что вам нужно определить типT
(который заменяетNode
), который основан на aNode
, чтобы передаваемые объекты имели общего предкаNode
, таким образом предоставляя вам доступ кx
иy
.