我有一个服务接口(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/