我遇到了一个AP CSA问题让我困惑了一段时间。这基本上是一个看似不完整的方法:
public static void methodMan(Comparable c) {.....}
问题首先询问在参数列表中使用类似接口是否有效,然后询问是否对可比较对象有任何限制。我被困在两个选项之间,即所传递的对象c
需要被转换或初始化为可比较的,或者对象c
可以是实现类似接口的任何对象。它是哪一个,如果它不是,对象c
会有什么限制?
答案 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);
}
并且像魅力一样运行。