仅使用get方法

时间:2017-10-11 06:31:36

标签: java interface

Edge.java(界面)

public interface Edge {

  /**
   * get the first node of the Edge.
   * @return the first Node.
   */
  public int getFirstNode();

  /**
   * get the second node of the Edge.
   * @return the second Node.
   */
  public int getSecondNode();

}

EdgeImpl.java(实现)

public class EdgeImpl implements Edge {

  private int node1;
  private int node2;


  public EdgeImpl(int node1, int node2) {
    this.node1 = node1;
    this.node2 = node2;
  }

  @Override
  public int getFirstNode() {
    // TODO Auto-generated method stub
    return node1;
  }

  @Override
  public int getSecondNode() {
    // TODO Auto-generated method stub
    return node2;
  }

}

first.java(我需要帮助)

import java.util.ArrayList;
import java.util.List;

public class first {

  public static void main(String[] args) {

    List<Edge> graph = new ArrayList<>();
    Edge a = new EdgeImpl(1, 2);
    Edge b = new EdgeImpl(3, 4);
    graph.add(a);
    graph.add(b);


  }
  public static void reverse(List<Edge> graph) {
    int count = 0;
    while(count < graph.size()) {
      int temp1 = graph.get(count).getFirstNode();
      int temp2 = graph.get(count).getSecondNode();
      graph.get(count).getFirstNode() = temp2;
      graph.get(count).getSecondNode() = temp1;
      count = count + 1;
    }
  }

}

Edge接口只有两个int值,我们有两个getter。

我们有一个像这样的列表[EdgeImpl(1,2),EdgeImpl(3,4)]

我希望将其列入[EdgeImpl(2,1),EdgeImpl(4,3)]。这正是反向方法的作用。

除非

我可以编辑界面或实现,所以我不能添加一个set方法,它必须是IN-PLACED。

我的尝试失败了,因为我无法使用get方法进行交换。我对如何交换它们非常困惑

有任何帮助吗?

1 个答案:

答案 0 :(得分:0)

如果您无法更改现有的EdgeImpl,请创建新的!{/ p>

我认为你的意思是&#34;就地&#34;是你不能返回一个新列表,你必须修改传入的列表。你应该被允许创建新的EdgeImpl。如果没有,那么这将涉及反思,这不是非常微不足道。

public static void reverse(List<Edge> graph) {
    for (int i = 0 ; i < graph.size() ; i++) {
        int temp1 = graph.get(i).getFirstNode();
        int temp2 = graph.get(i).getSecondNode();
        EdgeImpl newEdge = new EdgeImpl(temp2, temp1);
        graph.set(i, newEdge); // this overwrites the element in the list at position i.
    }
}