2014-09-21 70 views
1

考虑以下两行:如何指定对象在Java中实现接口?

arr = (J[]) new Object[10]; 

public void add(J obj){ 

我想在这里说明,歼实现可比,所以我可以写

while(arr[i] < obj) 

如何指定呢?

编辑:大卫华莱士的答案看起来是正确的,但我不知道如何在接口和类定义中适当地确定变量的范围。目前,他们分别是:

public interface OrderedListADT<J> extends Iterable<J> { 

public class OrderedVector<J> implements OrderedListADT<J>{ 
+1

什么是'J'?通用?你可以通过像'' – MadProgrammer 2014-09-21 23:37:40

回答

2

如果你在类级别定义它,那么你可以这样写:

public class OrderedVector<J extends Comparable<J>> implements OrderedListADT<J> 

可以在以类似的方式在接口级别定义它,如果你想强制要求所有此接口的用户将插入Comparable,但在类级别定义它将工作正常。

要进一步添加,执行Comparable的类只有compareTo方法(它分别返回一个负数,零或正数,分别小于,等于或大于。Java不会重载运算符,所以不会有任何地方的小于/大于符号

+0

这样的东西来限制约束条件真棒,谢谢 – 2014-09-22 00:05:13

3

如果它实现Comparable,你可以使用它的方法compareTo(给予相应类型的表达式)。如果实例类型为Comparable(或其他),则没有语法可让您使用>,>=,<<=运算符。

0

我想我们需要更多的细节,因为它不清楚你的情况是什么,但是,假设你有一些类MyClass(也许是一个类抽象类)没有实现Comparable,但如果你希望这个类的一些子类实现Comparable

public void add(MyClass obj) { 
    ... 
    ... 
    // We execute some logic, and if we get to this point, we can be sure that obj is 
    // *supposed* to be of a subclass that implements Comparable. 

    if (((Comparable)obj).compareTo(otherObj) < 0) { 

如上所示,您可以使用演员将obj作为Comparable,然后您可以使用compareTo方法。 (您不能直接在Java中的一个Comparable使用<)。如果我们的假设是错误的,obj真的不是一个Comparable,那么ClassCastException会在运行时抛出。

你也可以事先检查是这样的:

if (obj instanceof Comparable) { 
     int comparison = ((Comparable)obj).compareTo(otherObj); 
     ... 
    } else { 
     doSomethingUnusualBecauseObjIsntReallyComparable(); 
    }