powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Взаимодействие классов
8 сообщений из 8, страница 1 из 1
Взаимодействие классов
    #37612950
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть допустим 5 классов: A1, A2, A3, A4, A5;
У них всех есть один общий интерфейс. Плюс у каждого может быть (может и не быть) свой отдельный интерфейс.

Хочу сделать класс-обертку (Класс Z) для них.
В конструктор передается (int 1..5).

В зависимости от int создается класс (A1..5).

В дальнейшей работе с классом Z? я хочу видеть:

1 методы класса Z
2 общего интерфейса (классов A1..5)
3 и своих интерфейсов (если такие имеются).

1 и 2 понятно, проблема с 3 пунктом
...
Рейтинг: 0 / 0
Взаимодействие классов
    #37612954
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напишите внятный пример. А то на пальцах A-Z и ответ будет на пальцах - подключить генерики, ли создать насленика Z для специфичных интерфейсов.
...
Рейтинг: 0 / 0
Взаимодействие классов
    #37613027
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общий интерфейс

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
package test;

public interface Common {

  Integer getA();

  void setA();
}



Интерфейс для класса A1

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package test;

public interface CommonA1 {

  Integer getB();

  void setB();

}



Класс A1

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
package test;

public class A1 implements Common, CommonA1 {

  public A1() {
  }

  @Override
  public Integer getA() {
    return 0;
  }

  @Override
  public void setA() {
  }

  @Override
  public Integer getB() {
    return null;
  }

  @Override
  public void setB() {
  }

}



Класс A2

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
package test;

public class A2 implements Common {

  public A2() {
  }

  @Override
  public Integer getA() {
    return 0;
  }

  @Override
  public void setA() {
  }

}



Класс Z общий

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
package test;

public class Z implements Common {

  Common common;

  public Z(int x) {
    switch (x) {
      case 1:
        common = new A1();
        break;
      case 2:
        common = new A1();
        break;
      default:
        break;
    }
  }

  @Override
  public Integer getA() {
    return common.getA();
  }

  @Override
  public void setA() {
    common.setA();
  }

}



Теперь создаю класс Z передаю 1 и 2. Вызывая getA() или setA() будут вызывать в зависимости от параметра метода класса A1 или A2. Это все работает отлично. Но у класса A1 есть еще методы getB() или setB().


Вот я и хочу, когда создаю класс Z и передаю парметр были следующие методы видны:
Когда передаю 1, чтоб видел методы getA(), setA(), getB() и setB().
Когда передаю 2, чтоб только методы getA() или setA().
...
Рейтинг: 0 / 0
Взаимодействие классов
    #37613059
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-Вот я и хочу, когда создаю класс Z и передаю парметр были следующие методы видны:
Когда передаю 1, чтоб видел методы getA(), setA(), getB() и setB().
Когда передаю 2, чтоб только методы getA() или setA().
Прикастить к нужному интерфейсу и будут "видны".
Вопрос в том как именно вы их будете использовать? В методе getA должен вызывается getA или getB? Вариантов реализации масса. Проблема в том что любой предложеный вы с легкостью отметете, потому что у вас "другой случай". Поэтому нельзя ли более конкретно классы описать и их назначение

Простейший вариант
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 
...
 A1 delegate;
 Common c;
...
delegate = new A1();
...
case 1:
 common = delegate;    
case 2:
 common = new Common(){
   Integer getA() {return delegate.getB();}
 
    void setA() {delegate.setB()}
};
        break;



В реальной жизни наверняка можно сделать проще. Знать бы только вашу модель.
...
Рейтинг: 0 / 0
Взаимодействие классов
    #37613083
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz-=Koba=-Вот я и хочу, когда создаю класс Z и передаю парметр были следующие методы видны:
Когда передаю 1, чтоб видел методы getA(), setA(), getB() и setB().
Когда передаю 2, чтоб только методы getA() или setA().
Прикастить к нужному интерфейсу и будут "видны".
Вопрос в том как именно вы их будете использовать? В методе getA должен вызывается getA или getB? Вариантов реализации масса. Проблема в том что любой предложеный вы с легкостью отметете, потому что у вас "другой случай". Поэтому нельзя ли более конкретно классы описать и их назначение


Не если параметр 1

то это класс А1
и следовательно для Z.getA() выйдет A1.getA(), а для Z.getB() выйдет A1.getB();

для класса ж A2

только getA()
...
Рейтинг: 0 / 0
Взаимодействие классов
    #37613097
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как именно планируетяс использовать CommonA1 тогда? А примере он вводится, но не используется.
Покажите, код, который должен его использовать, но не может, потомучто имеет только Common.
Из этого будет видно как лучше. Просто генериками, или ещё от Z наследоватся.
...
Рейтинг: 0 / 0
Взаимодействие классов
    #37613318
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА как именно планируетяс использовать CommonA1 тогда? А примере он вводится, но не используется.
Покажите, код, который должен его использовать, но не может, потомучто имеет только Common.
Из этого будет видно как лучше. Просто генериками, или ещё от Z наследоватся.

Образно говоря Класс Z у меня представлен сейчас так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
package test;

public class Z implements Common, CommonA1 {

  Common common;

  public Z(int x) {
    switch (x) {
      case 1:
        common = new A1();
        break;
      case 2:
        common = new A1();
        break;
      default:
        break;
    }
  }

  @Override
  public Integer getA() {
    return common.getA();
  }

  @Override
  public void setA() {
    common.setA();
  }

  @Override
  public Integer getB() {
    Integer z = 0;
    if (param == 1) {
      z = ((CommonA1) common).getB();
    }
    return z;
  }

  @Override
  public void setB() {
    if (param == 1) {
      z = ((CommonA1) common).setB();
    }
  }

}



Param - это число заходящее в конструкторе.
Для A1, A2 методы все видны. Только в A1 используются все, а в A2 первые два. Вот и хочу чтоб последние два не были видны

Как-то так
...
Рейтинг: 0 / 0
Взаимодействие классов
    #37613345
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-Образно говоря Класс Z у меня представлен сейчас так

Прям в коде напишите что именно должно быть по-другому

-=Koba=-Param - это число заходящее в конструкторе.
Для A1, A2 методы все видны. Только в A1 используются все, а в A2 первые два. Вот и хочу чтоб последние два не были видны
Как-то так
Кому не видны? Почему сделано именно так а не иначе? Какая роль у класса Z? Просто делегирует вызовы? Почему A1 не расширяет A2?

Без предметной области найти решение сложно. Потому что вариантов масса.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Взаимодействие классов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]