Приведение типов через композицию (интерфейсы и классы)

У меня серьезное отключение, когда я пытаюсь использовать методы классов (из которых оба класса реализуют интерфейсы), которые также содержат 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. Я бы избавился от синтаксических ошибок, а затем снова спросил, что-то здесь не так, что я не могу точно понять, куда вы идете.

Другие вопросы по тегам