2012-07-06 40 views
3

带有类型参数的接口有什么用途?他们真的用了什么?我的理解是正确的。 比方说,我有这个接口界面类型参数的用法是什么?

public interface Moveable <Person>{ 
    void move(double x, double z); 
} 

这是否意味着,只有那些类型的人可以使用对象/实现这个?

回答

7

这不是典型的模式,在你的情况下,类型参数没有做任何事情。这是一个更好的例子。

public interface Movable<T> { 
    T move(); 
} 

现在,你的代码将返回实施者指定的,而不是你刚才说的举动总是返回对象或其他一些更通用类的类型。

编辑:你的界面

public MyMover implements Movable<Truck> { 
    public Truck move(){ 
     return new Truck(); 
    } 
} 

你真的不能限制实施者是某些类型。如果需要,您可以限制它by package。也许抽象类会为你更好地工作。

+0

我怎样才能限制使用此接口的其他对象?我应该添加一个上限?像T延伸可比?其中只有实现可比较的类或对象才能够使用此接口?你能提供一个你创建的界面的例子吗? – user962206 2012-07-06 04:18:28

+1

@ user962206:阅读[教程](http://docs.oracle.com/javase/tutorial/java/generics/bounded.html)的时间? – vanza 2012-07-06 04:21:02

+0

@jjathman是正确的。因为,如果您稍后决定要扩大其使用范围,那么在界面中指定类型并不能提供非常可扩展的代码。你不需要'限制它的使用'必然OP,只是控制通过你的代码使用它的东西。 – 2012-07-06 04:25:04

1

Does this mean that only objects that are Type Person can use implement this?

不,不完全是,通用在接口使用,如果它是在一个正常的课堂上使用是一样的。它指定接口将包含/操作的对象类型。

想想你是如何申报ArrayList的。您需要指定ArrayList将包含的对象类型,因为它以不同方式处理每种类型的对象。

在您声明的接口中,您所说的实现此接口的类只能保存/处理Person类型的对象。

有关泛型的更多信息,请点击此链接:

Oracle: Generics

相关问题