java - 基本接口(interface)说明

标签 java generics interface

我觉得我应该知道这一点,但当被问到时却无法真正解释。 我有一个方法:

public <T extends IByteConverter<T>> int write(T obj) throws IOException {
    byte[] byteArray = obj.toByteArray();
    raFile.write(byteArray);
    //keeps track of size of what was written
    return byteArray.length;
}

和我的界面:

interface IByteConverter<T> {
    public byte[] toByteArray();
    public T fromByteArray(byte[] byteArray);
}

当我调用 obj.toByteArray() 时,我的程序如何知道要做什么?在我的类(class)中,我没有实际实现 IByteConverter 中的代码,但程序按预期工作。有没有一个简单的方法来解释发生了什么?

最佳答案

让我们用另一个例子让事情更容易理解:您定义一个接口(interface) Fruit,它有一个方法 getColor()。此方法的约定是它返回一种颜色。

根据此约定,您定义一个类,该类采用 Fruit 数组,并计算红色水果的数量。

您不需要任何实现来编译此方法,因为您可以确定唯一可以传递给此方法的是对象数组,这些对象是确实实现了 Fruit 接口(interface)的类。为了使该方法运行,您需要至少定义一个实现 Fruit 接口(interface)的类(例如 Apple ),并构造该类的对象数组。

这就是多态性的全部内容:只要尊重其接口(interface)的约定,您就可以在不知道其实际类是什么的情况下调用对象的方法。

泛型不会让这变得不同。由于 obj 的类型为 T,并且 T 扩展了 IByteConverter,因此您可以调用 toByteArray( ) obj 上的方法。

关于java - 基本接口(interface)说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652763/

相关文章:

java - 使用扫描仪显示 .txt 文件中的特定单词

java - 使用 Jackson 进行 JSON 反序列化

java - 如何测量执行的操作数

java - 如何实例化泛型类并调用方法

c# - 无法转换异常类型的 COM 对象

java - 如何在接口(interface)上有效利用继承和多态性

java - 如何在 Java Swing 中将 ScrollBar 添加到 JTextArea?

java - Eclipse 警告 - 类是原始类型。对泛型类型 Class<T> 的引用应该被参数化

c# - 为什么生成的代码与声明泛型类的两种方式不同

pointers - 如何将不同的错误接口(interface)实现存储在一起,然后在 Go 中使用它们进行类型比较?