Java 泛型:集合中的通配符
- 扩展
- 超级
- ?
今天我将向您解释通配符的用处。理解这个概念有点困难
现在假设你有一个抽象类,并且你有一个叫做paintObject()的抽象方法。
Now you want to use different type of collection in every child class.
下面是 AbstractMain 方法。
我们为这个 Abstract Main 方法采取的步骤
1.我们已经创建了抽象类
2. 在参数中我们定义了 T(你可以使用任何字符)
--在这种情况下,无论哪个类实现了这个方法,它都可以使用任何类型的类。
前任。类可以实现类似的方法
public void paintObject(ArrayList object) 或 public void paintObject(HashSet object)
3. 而且我们还使用了 E extends MainColorTO
-- 在这种情况下 E 扩展 MainColorTo
-- 这显然意味着你想使用的任何类都必须是 MainColorTo 的子类
4. 我们定义了一个抽象方法叫做paintObject(T object,E objectTO)
--现在,无论哪个类是实现方法,该方法都可以在第一个参数上使用任何类,第二个参数该方法必须使用 MainColorTO 的类型
public abstract class AbstractMain<T,E extends MainColorTO> {
public abstract void paintObject(T Object,E TO);
}
现在我们将扩展上面的抽象类并在下面的类上实现方法
例如。
public class MainColorTO {
public void paintColor(){
System.out.println("Paint Color........");
}
}
public class RedTO extends MainColorTO {
@Override
public void paintColor() {
System.out.println("RedTO......");
}
}
public class WhiteTO extends MainColorTO {
@Override
public void paintColor() {
System.out.println("White TO......");
}
}
现在我们举两个例子。
1.PaintHome.java
public class PaintHome extends AbstractMain<ArrayList, RedTO> {
@Override
public void paintObject(ArrayList arrayList,RedTO red) {
System.out.println(arrayList);
}
}
现在在上面的 PaintHome.java 中,您可以检查我们在第一个参数中使用了 ArrayList(因为我们可以采用任何类),在第二个参数中我们使用了 RedTO(这是扩展 MainColorTO)
2.PaintCar.java
public class PaintCar extends AbstractMain<HashSet, WhiteTO>{
@Override
public void paintObject(HashSet Object,WhiteTO white) {
System.out.println(Object);
}
}
现在在上面的 PaintCar.java 中,您可以检查我们在第一个参数中使用了 HashSet(因为我们可以采用任何类),在第二个参数中我们使用了 WhiteTO(扩展 MainColorTO)
要记住的要点
您不能在类级别使用 super 关键字,您只能在类级别定义中使用 extends 关键字
public abstract class AbstractMain<P,E super MainColorTO> {
public abstract void paintObject(P Object,E TO);
}
上面的代码会给你编译错误。