2016-08-29 3 views
-2

Может быть, название не является конкретным, я просто не знаю, как его назвать. Я объясню вам подробно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

Я надеюсь, что мой вопрос ясно Любые предложения? Заранее спасибо

+1

Подсказка: A) даже не начинайте строить, если (mode.equals («A») ИЛИ «B» или «C») - это дорога к стиранию B) метод с именем ** canISubscribe ** должен ** никогда никогда не манипулировать ** состоянием ** базового объекта: имя метода указывает, что он делает. «canISubscribe» не сообщает вам, что произойдет внутри метода. – GhostCat

+0

@GhostCat не могли бы вы написать небольшой пример, чтобы посмотреть, как я могу его улучшить, пожалуйста, – andreahg

+1

Я уже сказал: вы начинаете с использования имен методов, которые сообщают вам, что происходит. Итак, в вашем случае вы можете иметь «canISubscribe» и «addSubscription». – GhostCat

ответ

2

Попробуйте использовать ссылку TestCentralRegistry в ChannelComponent.

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>(); 
    private TestCentralRegistry testCentralRegistry; 

    public ChannelComponent(String name, String mode) { 
     this.name = name; 
     this.mode = mode; 
    } 

    public void registerTestCentralRegistry(TestCentralRegistry testCentralRegistry) { 
     this.testCentralRegistry = testCentralRegistry; 
    } 
} 

Зарегистрируйте свой 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(); 

     ChannelComponent cc1 = new ChannelComponent("channel1", "1P1C"); 
     cc1.registerTestCentralRegistry(demo); 
     ChannelComponent cc2 = new ChannelComponent("channel2", "XPXC"); 
     cc2.registerTestCentralRegistry(demo); 

     demo.addChannelComponent(cc1); 
     demo.addChannelComponent(cc2); 
    } 
} 

Затем, вы можете получить значение, созданное в TestCentralRegistry по телефону testCentralRegistry.getX() от ChannelComponent.

+0

спасибо @uoyilmaz, да, это имеет смысл сделать это! – andreahg

Смежные вопросы