【问题标题】:Overloading methods in an interface using generics as parameters使用泛型作为参数重载接口中的方法
【发布时间】:2014-04-20 15:22:39
【问题描述】:

我有一个 Java 接口 A 定义了一个方法,该方法将另一个接口 B 作为参数。 我想知道是否可以在实现类中重载该方法,以将实现接口 B 的对象作为参数提供。 这是我的意思的示例代码:

public interface SampleInterfaceA{
    public void sampleMethod(SampleInterfaceB b);
}

public class ClassB implements SampleInterfaceB{}
public class ClassC implements SampleInterfaceB{}

public class SampleClassA implements SampleInterfaceA{
    @Override
    public void sampleMethod(ClassB b){}
}

public class SampleClassB implements SampleInterfaceA{
    @Override
    public void sampleMethod(ClassC c){}
}

提前感谢您的帮助。

【问题讨论】:

  • 您不需要创建覆盖方法。当您调用 SampleClassA::sampleMethod(B)(B 是 B 类的瞬间)时,它将调用 SampleInterfaceA::sampleMethod(SampleInterfaceB b)。 BTW public void sampleMethod(ClassB b){}

标签: java generics interface overloading


【解决方案1】:

如果您尝试一下,您会发现SampleClassA 和SampleClassB 被编译器视为缺少实现SampleInterfaceA 所需的东西。

你需要实现接口中定义的实际方法。

大致获得您想要的结果的一种方法是使用泛型:

public interface SampleInterfaceA <T extends SampleInterfaceB>{
    public void sampleMethod(T b);
}

public class SampleClassA implements SampleInterfaceA<ClassB>{
    public void sampleMethod(ClassB b){}
}

public class SampleClassB implements SampleInterfaceA<ClassC>{
    public void sampleMethod(ClassC c){}
}

【讨论】:

  • 这正是我所需要的,也是在 java 中使用模板的一个很好的例子。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多