Java 类的ArrayList,获取在另一个类中创建的特定值

Java 类的ArrayList,获取在另一个类中创建的特定值,java,arraylist,Java,Arraylist,也许标题不是特别的,我只是不知道怎么称呼它。我会详细解释你的 我有以下课程: public class ChannelComponent { private String name; private String mode; //(1P1C / XPXC / 1PXC) private List<SourceProvidedPort> publishers = new ArrayList<SourceProvidedPort>(); pr

也许标题不是特别的,我只是不知道怎么称呼它。我会详细解释你的

我有以下课程:

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和TestChannel中创建的值,看看是否有匹配的值。我知道我仍然需要添加一些行,比如从newPort.getWantsUse()获取值并将其与channelComponent名称进行比较。。。但我仍然需要TestCentralRegistry中创建的值

我希望我的问题很清楚 有什么建议吗?
提前感谢您

尝试在ChannelComponent中保留对TestCentralRegistry的引用

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;
    }
}
公共类通道组件{
私有字符串名称;
私有字符串模式;//(1P1C/XPXC/1PXC)
私有列表发布者=新的ArrayList();
私有列表订阅者=新的ArrayList();
私有TestCentralRegistry TestCentralRegistry;
公共通道组件(字符串名称、字符串模式){
this.name=名称;
这个模式=模式;
}
公共无效注册表TestCentralRegistry(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{
私有列表通道=新的ArrayList();
公共void addChannelComponent(ChannelComponent c){
增加(c);
}
公共静态void main(字符串…参数){
TestCentralRegistry demo=新的TestCentralRegistry();
ChannelComponent cc1=新的ChannelComponent(“channel1”、“1P1C”);
cc1.注册测试中心注册(演示);
ChannelComponent cc2=新的ChannelComponent(“channel2”、“XPXC”);
cc2.注册测试中心注册(演示);
demo.addChannelComponent(cc1);
demo.addChannelComponent(cc2);
}
}

然后,您可以通过从ChannelComponent调用
TestCentralRegistry.getX()
来检索在TestCentralRegistry中创建的值。

提示:A)如果(mode.equals(“A”)或“B”或“C”),甚至不开始构建-这是一条通往desaster的道路B)名为canISubscribe的方法永远不应该操纵底层对象的状态:方法的名称说明了它的功能。“canISubscribe”没有告诉您方法内部会发生什么。@GhostCat您能写一个小例子,看看我如何改进它吗?我已经告诉过您:您可以从使用方法名称开始,告诉您发生了什么。所以,在你的例子中,你可以有“CaniSubscription”和“addSubscription”。你看,其他任何东西都会非常耗时。您的代码提供了足够的“内容”供您在数小时内进行检查和改进。长话短说:A)阅读罗伯特·马丁(Robert Martin)的《干净的代码》(Clean code)等书B)找到比你更有经验的真人,让他们检查你的代码。好的@GhostCat我会的,谢谢你的建议!
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;
    }
}
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);
    }
}