Приведение типов через композицию (интерфейсы и классы)
У меня серьезное отключение, когда я пытаюсь использовать методы классов (из которых оба класса реализуют интерфейсы), которые также содержат generics
, у меня есть SetInterface
интерфейс, который содержит методы для моего Set
учебный класс. То же самое верно для моего ProfileInterface
интерфейс и Profile
учебный класс. В моем Profile
класс, у меня есть следующий приведение типа со ссылкой на Set
учебный класс:
private Set<ProfileInterface> followBag = new Set<ProfileInterface>();
В основном мы учимся Array Bags
, Linked Bags
и т. д. в моем классе структур данных. Моя проблема в том, что я хочу использовать методы Set
Класс структуры данных в моем Profile
класс через Composition
, Единственная проблема, с которой я столкнулся, заключается в том, что мне нужно создать метод в моем Profile
класс, который перекрестно ссылается на элементы в данном массиве, чтобы увидеть, если это Profile
объект "следует" за другим Profile
и, если нет, рекомендует, чтобы за этим объектом следовали (назначение - выполнить нечто похожее на то, что есть в Twitter или Facebook со структурами данных). Вот метод, который я создал до сих пор, и ошибка, которую я не могу пропустить (третья строка сверху):
public ProfileInterface recommend(){
ProfileInterface recommended;
ProfileInterface thisProfile = new Profile(); // <--Here is the question
for(int index = 0; index < followBag.getCurrentSize(); index++){
ProfileInterface follows = followBag[index];
for(int followedFollowers = 0; followedFollowers < follows.getCurrentSize(); followedFollowers++) { // <--Question here also
//if Profile's match, do nothing
//if Profile's do not match, set recommended == the Profile
}
}
return recommended;
}
Пожалуйста, извините мой псевдокод, который остается, так как я все еще работаю над ним. Но я не могу продолжать этот метод, пока полностью не пойму, что мне нужно сделать, чтобы правильно выполнить третий актерский состав, и понять, возможно ли другое мое беспокойство (второе примечание).
Я нахожусь во втором классе Java, и я не могу пройти мимо этих проблем. В идеале я надеюсь, что один из членов или несколько членов могут довести это до 5-летнего уровня, чтобы я мог полностью понять это. Я понимаю что Profile
класс будет иметь отношение "имеет" (Composition
) со мной Set
учебный класс. Я также знаю, что так как я произнес followBag
так, как я сделал, что он будет иметь оба ProfileInterface
а также Set
доступные ему методы. Но я хотел бы получить объяснение, с примерами, если это возможно, о том, как я могу правильно набрать приведение внутри метода, чтобы взять элемент массива, или в моем Set
в этом примере, и привести это к данному объекту? Я хочу заполнить этот объект, (thisProfile
в данном случае) к данному индексу для целей сравнения. Но есть две части, которые мне нужно прояснить:
А) Что происходит с объектом, приведенным к типу, следующим образом:ProfileInterface thisProfile = new Profile();
Поскольку я имею в виду как интерфейс, так и класс, который его реализует? Смысл, если у меня есть больше методов в моем Profile()
класс, какие методы будут это thisProfile
иметь доступ только к; интерфейс или класс?
Б) Должен ли я просто позвонить ProfileInterface thisProfile
а затем назначить ссылку на thisProfile
к определенному индексу в моем внутреннем for
цикл?
C) Мое второе замечание: в IntelliJ я получаю сообщение об ошибке "cannot resolve method getCurrentSize()
"Я не понимаю этого, так как я создал follows
линия выше этого. я думал так ProfileInterface follows = followBag[index]
установил бы данный Profile
Индекс массива, равный этому для использования позже в моем коде. Эта ошибка проистекает из моей путаницы выше. Так что я уверен, когда мне дадут некоторую ясность в том, что я делаю неправильно, я уверен, что исправлю это соответствующим образом.
Всем спасибо и как всегда жду ваших отзывов!
1 ответ
А) Что происходит с объектом, приведенным к типу, следующим образом: ProfileInterface thisProfile = new Profile();
Во-первых, это назначение, а не приведение типов.
Поскольку я имею в виду как интерфейс, так и класс, который его реализует? То есть, если у меня есть больше методов в моем классе Profile (), к каким методам этот thisProfile будет иметь доступ только; интерфейс или класс?
Вы будете иметь доступ только к методам в ProfileInterface
, Если это проблема, я предлагаю вам просто изменить ProfileInterface
в Profile
, Типы приватных переменных не должны быть проблемой для рефакторинга.
C) Мое второе замечание: я получаю сообщение об ошибке в IntelliJ, в котором говорится, что "не удается разрешить метод getCurrentSize()". Я не понимаю этого, так как я создал следующую линию над этим.
Это означает, что followBag
это Set
и не реализует метод с именем getCurrentSize()
,
Я думал, что ProfileInterface следует = followBag[индекс] установит заданный индекс профиля массива равным тому, который будет использоваться позже в моем коде.
Это не связано с первой частью вопроса С. followBag
это не массив. Я не уверен, что вы пытаетесь сделать здесь, но если вы программист на C#, Java не использует тот же синтаксис. []
не может быть использован для доступа к членам коллекции. Вы должны использовать get()
или связанный метод.
Я действительно не уверен, что вы пытаетесь сказать в вопросе B. Я бы избавился от синтаксических ошибок, а затем снова спросил, что-то здесь не так, что я не могу точно понять, куда вы идете.