Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带类型参数的接口有什么用途?_Java_Generics_Interface - Fatal编程技术网

Java 带类型参数的接口有什么用途?

Java 带类型参数的接口有什么用途?,java,generics,interface,Java,Generics,Interface,带类型参数的接口有什么用途?它们的真正用途是什么?我的理解正确吗。 假设我有这个接口 public interface Moveable <Person>{ void move(double x, double z); } 公共接口可移动{ 无效移动(双x,双z); } 这是否意味着只有Person类型的对象才能使用/实现此功能?这不是典型的模式,在您的情况下,类型参数没有任何作用。这里有一个更好的例子 public interface Movable<T>

带类型参数的接口有什么用途?它们的真正用途是什么?我的理解正确吗。 假设我有这个接口

public interface Moveable <Person>{
    void move(double x, double z);
}
公共接口可移动{
无效移动(双x,双z);
}

这是否意味着只有Person类型的对象才能使用/实现此功能?

这不是典型的模式,在您的情况下,类型参数没有任何作用。这里有一个更好的例子

public interface Movable<T> {
    T move();
}
可移动公共接口{
T move();
}
现在,您的代码将返回实现者指定的类型,而不是说move始终返回object或其他更通用的类

编辑:

public MyMover实现可移动{
公共卡车移动(){
归还新卡车();
}
}

您不能将接口的实现者限制为特定类型。如果你愿意,你可以限制它。也许抽象类更适合您

这是否意味着只有Person类型的对象才能实现此功能?

不,不完全是这样,泛型在接口中的使用与在普通类中的使用完全相同。它指定接口将包含/操作的对象类型

想一想如何声明
ArrayList
。您需要指定
ArrayList
将包含的对象类型,因为它处理每种类型的对象的方式不同

在接口声明中,您是说实现此接口的类将只保存/操作
Person
类型的对象

有关泛型的更多信息,请查看以下链接:


如何使用此界面限制其他对象?我应该加一个上限吗?像T?其中只有实现Compariable的类或对象才能使用此接口?你能提供一个你创建的界面的例子吗?@user962206:time to read a?@jjathman是正确的。照目前的情况,如果您以后决定要扩展它的使用范围,那么在接口中指定类型不会产生非常可伸缩的代码。你不需要限制它的使用,只需要通过你的代码来控制它的用途。我为你添加了一个非常做作的例子,但是Java接口并不能真正做到你想让它们做的事情。
public MyMover implements Movable<Truck> {
    public Truck move(){
        return new Truck();
    }
}