接口作为参数(限制)

时间:2018-03-22 20:39:40

标签: java

我遇到了一个AP CSA问题让我困惑了一段时间。这基本上是一个看似不完整的方法:

public static void methodMan(Comparable c) {.....}

问题首先询问在参数列表中使用类似接口是否有效,然后询问是否对可比较对象有任何限制。我被困在两个选项之间,即所传递的对象c需要被转换或初始化为可比较的,或者对象c可以是实现类似接口的任何对象。它是哪一个,如果它不是,对象c会有什么限制?

2 个答案:

答案 0 :(得分:1)

是的,将interfaces用作方法中的参数是有效的,是对象c可以是实现该接口的任何对象。第二部分的唯一警告是,如果有一个特殊的方法需要调用接口没有实现,那么你需要先将它强制转换为类来获取方法例如:

public class MyComparable implements Comparable<String> {

  private String item;

  public MyComparable(String item) {
    this.item = item;
  }

  @Override
  public int compareTo(String o) {
    return this.item.compareTo(o);
  }

  public Integer doThis() {
    return 100;
  }

  public Integer compareSample(Comparable<String> c) {
    if (c instanceof MyComparable) {
      return ((MyComparable)c).doThis();
    }
    return c.compareTo(this.item);
  }

}

答案 1 :(得分:0)

像魅力一样编译:

public static void methodMan (Comparable c) {
    out.println ("we ignore c");
}

public static void main (String args[])
{
    Comparable c1 = new String ();
    methodMan (c1);
    methodMan ((Comparable) c1);
    String s2 = new String ();
    methodMan (s2);
    methodMan ((Comparable) s2);
}

并且像魅力一样运行。