Может быть, название не является конкретным, я просто не знаю, как его назвать. Я объясню вам подробноArrayList класса, получить определенное значение, созданное в другом классе
У меня есть эти классы:
public class ChannelComponent {
private String name;
private String mode; //(1P1C/XPXC/1PXC)
private List<SourceProvidedPort> publishers = new ArrayList<SourceProvidedPort>();
private List<SinkRequiredPort> subscribers = new ArrayList<SinkRequiredPort>();
public ChannelComponent(String name, String mode) {
this.name = name;
this.mode = mode;
}
public boolean canISubscribe(SinkRequiredPort newPort) {
if ((mode.equals("1P1C") || mode.equals("1PXC")) && subscribers.size() < 1) {
subscribers.add(newPort);
return true;
} else if (mode.equals("XPXC")) {
subscribers.add(newPort);
return true;
}
return false;
}
public String getName() {
return name;
}
public String getMode() {
return mode;
}
public void printChannel() {
System.out.println("[" + name + "," + mode + "]" + "\n");
}
}
TestCentralRegistry
public class TestCentralRegistry {
private List<ChannelComponent> channels = new ArrayList<ChannelComponent>();
public void addChannelComponent(ChannelComponent c) {
channels.add(c);
}
public static void main(String... args) {
TestCentralRegistry demo = new TestCentralRegistry();
demo.addChannelComponent(new ChannelComponent("channel1", "1P1C"));
demo.addChannelComponent(new ChannelComponent("channel2", "XPXC"));
}
}
В TestCentralRegistry класса я создал 2 channelComponents, эти каналы, я хотел бы сравнить их режим значение в методе canISubscribe (находится в классе ChannelComponent). Но почему, я мог получить значения, созданные в TestCentralRegistry, чтобы прочитать их в классе ChannelComponent?
Что мне не хватает?
Потому что, из другого класса TestChannel Я собираюсь иметь ChannelComponent ссылку, вызовите метод canISubscribe
public class TestChannel {
ChannelComponent channelComponent;
public void callSubscribe(SinkRequiredPort newPort){
channelComponent.canISubscribe(newPort);
}
public static void main(String... args) {
TestChannel testChannel = new TestChannel();
SinkRequiredPort sinkPort = new SinkRequiredPort();
sinkPort.setWantsUse("channel1");
testChannel.callSubscribe(sinkPort);
}
}
И мне нужно, чтобы сравнить значения, созданные в TestCentralRegistry и TestChannel, чтобы узнать, есть ли соответствие. Я знаю, что мне еще нужно добавить некоторые строки, такие как получение значения из newPort.getWantsUse(); и сравнить его с именем channelComponent ... но все-таки мне нужно значение, созданное в TestCentralRegistry
Я надеюсь, что мой вопрос ясно Любые предложения? Заранее спасибо
Подсказка: A) даже не начинайте строить, если (mode.equals («A») ИЛИ «B» или «C») - это дорога к стиранию B) метод с именем ** canISubscribe ** должен ** никогда никогда не манипулировать ** состоянием ** базового объекта: имя метода указывает, что он делает. «canISubscribe» не сообщает вам, что произойдет внутри метода. – GhostCat
@GhostCat не могли бы вы написать небольшой пример, чтобы посмотреть, как я могу его улучшить, пожалуйста, – andreahg
Я уже сказал: вы начинаете с использования имен методов, которые сообщают вам, что происходит. Итак, в вашем случае вы можете иметь «canISubscribe» и «addSubscription». – GhostCat