java - 使用数组覆盖 Java 泛型方法

标签 java arrays generics overriding

我有一个服务接口(interface),例如:

public interface Service {
    <T> void print(T data);
}

当我尝试用数组覆盖此方法时,我会收到编译错误,这对于非数组对象来说没问题。
我知道如果在接口(interface)级别定义类型 T,数组和非数组都可以正常工作。
我没有创建数组,我只是尝试将数组作为类型传递。

public <String[]> void print(String[] data) //compilation error
public <String> void print(String data) // fine

为什么我不能用数组覆盖?

最佳答案

该泛型无法按您期望的方式工作。您的 Service 接口(interface)表示,任何 Service 必须能够打印任何内容。想要的

interface Service<T> {
    void print(T t);
}

class StringService implements Service<String> {
    void print(String str);
}

class StringArrayService implements Service<String[]> {
    void print(String[] str);
}

你得到了什么

public <String> void print(String data) // fine

不太很好。完全一样

public <E> void print(E data);

除了类型变量不是命名为E,而是命名为String,并且它与您期望的String没有实际关系。

关于java - 使用数组覆盖 Java 泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752012/

相关文章:

java - 移动到 open-jdk 8u212 时 IntelliJ 的部署问题

java - 如何在 Hibernate/JPA 中表示加权多对多关系?

c - 阵列输出困难

java - Class<T> 用于 Java 中的泛型?

Java 集合接口(interface) addAll() 方法签名

ios - 创建一个通用函数,该函数接受 View Controller 类型作为参数,并根据该类型返回自定义 View Controller

java - LinearLayout 不显示以编程方式添加的图像

java - 混合应用程序不显示滚动条

PHP PDO - 将数组用于 SELECT SQL 语句

php - 查找数组值之间步数的有效方法