use*_*866 2 java oop generics inheritance
所以我有3节课.
Abstract class A
Class B extends class A
independent Class C
Run Code Online (Sandbox Code Playgroud)
在包含main方法的D类中,我创建了一个B类实例的列表
List<B> b = methodCall(); // the method returns a list of instances of class B
Run Code Online (Sandbox Code Playgroud)
现在在类CI中有一个方法对A和B都是通用的,因此我不想复制它.我想有一个方法,将A类的实例作为输入,如下所示:
public void someMethod(List<A> a)
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时:
C c = new C();
c.someMethod(b);
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,一些方法不适用于参数List<B>,而是期望获得List<A>.
有没有一种解决这个问题的好方法?非常感谢!
如果你有一个期望的方法List<A>和一个类B extends A,并且你想要传递这个方法List<B>,那么你应该将方法声明为:
public void someMethod(List<? extends A> list)
Run Code Online (Sandbox Code Playgroud)
这允许传递给方法的列表是A的列表或任何扩展B的列表.
请注意,您将无法确定?传入方法的确切类型.
此外,如果您在两个类之间有重复的方法,那可能表明您的设计出现了问题.
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |