タイトルは特定のものではないかもしれませんが、私はそれをどのように呼び出すのか分かりません。私は、これらのクラスを持って詳細にクラスの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"));
}
}
を私は2 channelComponentsを作成しTestCentralRegistryクラスでは、私は希望のこれらのチャネルを比較しますそれらのモード方法の値canISubscribe(ChannelComponentクラスにあります)。しかし、どうすればTestCentralRegistryで作成した値をChannelComponentクラスに読み込むことができますか?
私は何が欠けていますか?
私はChannelComponentの参照を持っているつもりです別のクラスからTestChannel、ので、メソッドを呼び出す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")OR "B"または "C")の場合はビルドを開始しないでください - これはdesasterの道ですB)** canISubscribe ** should **というメソッド基本オブジェクトの**状態**を決して操作することはありません。メソッドの名前は、それが何をするかを示します。 "canISubscribe"は、メソッド内で何が起こるかを教えてくれません。 – GhostCat
@GhostCat小さな例を書いて、どうすれば改善できるか教えてください。 – andreahg
私はすでに言っています。まず、何が起きているのかを示すメソッド名を使用します。したがって、あなたのケースでは、 "canISubscribe"と "addSubscription"を持つことができます。 – GhostCat