java - Java 中具有继承性的 Varargs

标签 java generics inheritance variadic-functions member-hiding

假设我有一个类 Foo像这样:

public class Foo<T> {
    protected T invoke(Object... args);
}

现在假设我添加这个:

public class Bar<T, Arg> extends Foo<T> {
    public T invoke(Arg arg);
}

这是否意味着我无法创建 Bar<T, Object[]>因为它会创建两个 invoke()具有“本质上”相同签名的方法?或者会 Bar.invoke()安全隐藏 Foo.invoke()在这种情况下(因为 Bar.invoke() 在运行时是采用 Object 而不是 Object[]Foo.invoke() )?

相关:正在转发Bar.invoke()Foo.invoke()安全好吗?

最佳答案

Bar.invoke不会覆盖 Foo.invoke .如果你只打电话 bar.invoke没有参数你会得到 foo.invoke打电话。

但是如果你构造一个 reference to invoke is ambiguous ,你会得到一个编译时错误 ( Bar )对象:Bar<Object, Object[]> bar = new Bar<Object, Object[]>()然后调用 bar.invoke(new Object[]{})因为这 2 个调用方法在运行时具有相同的删除。

关于java - Java 中具有继承性的 Varargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226040/

相关文章:

java - 如何序列化包含 nio.Buffer 的类?

java - 使用 Runtime.exec fork 当前进程的另一个实例

C++ 继承、成员和冗余数据

java - 帮助解决 java rmi 作业中的问题

java - 如何在Java中操作EPS文件?

java - 关于我的代码的类型错误的非法开始

java - Java 方法可以返回 Enum 类型吗?

java - 获取Map(TreeMap/HashMap)中对应最大值关联的key

c++ - 无法使用类型为 'Parent' 的表达式初始化类型为 'Derived' 的对象参数

javascript - 原型(prototype)对象的构造函数属性