Java 通配符泛型例子

请看下面的代码,其中会发生错误的代码已经注释掉,并且写明了错误类型

总体来说,泛型通配符就是为了支持多态时父子类,接口扩展类之间的相互转换而生


package test;

import java.util.ArrayList;
import java.util.List;

public class GenericTester {
public static void main(String[] args){
GenericTester genericTester=new GenericTester();
List<TestA> list=new ArrayList<GenericTester.TestA>();
GenericTester.TestA tester=genericTester.new TestA();
list.add(tester);
TryGeneric1(list);
TryGeneric2(list);
// TryGeneric3(list);  has compile error
// TryGeneric4(list);  has compile error
}
private interface ITest{
public void Test();
}
private class TestA implements ITest{

@Override
public void Test() {
// TODO Auto-generated method stub
System.out.println("TestA");
}
}
private static void TryGeneric1(List<? extends ITest> testList){
for(ITest tester:testList){
tester.Test();
}
}
private static void TryGeneric2(List<?> testList){
// for(ITest tester:testList)   // cause error
for(Object tester:testList){
((ITest)tester).Test();
}
}
private static void TryGeneric3(List<ITest> testList){
for(ITest tester:testList){
((ITest)tester).Test();
}
}
private static void TryGeneric4(List<Object> testList){
for(Object tester:testList){
((ITest)tester).Test();
}



转载于:https://www.cnblogs.com/vanpan/archive/2012/08/18/3583042.html

Java中,通配符用于解决类型安全问题,并提供了一种方法来引用类型,而不需要知道具体的类型参数通配符主要有以下几种形式: 1. `?`:无界通配符,表示未知的类型,可以匹配任何对象的类型。 2. `<? extends 类接口>`:表示具体的类型,但不是确定的类型。`extends`在这里的意思是“某种类型的子类”。这可以用来限定类型参数的上界,只允许该通配符引用某个类型其子类型。 3. `<? super 类接口>`:表示具体的类型,但不是确定的类型。`super`在这里的意思是“某种类型的父类”。这可以用来限定类型参数的下界,只允许该通配符引用某个类型其父类型。 4. `? extends 类型1 & 类型2 & ... & 类型n>`:表示有限制的通配符,可以引用同时满足多个上限类型约束的类型。 使用通配符的目的是为了增强代码的灵活性,同时保证类型安全。例如,如果有一个方法需要接受任何类型的`List`作为参数,但不想限制这个`List`只能包含特定类型的对象,那么可以使用无界通配符`<?>`。 下面是一个简单的例子,来说明如何使用通配符: ```java public class GenericWildcardExample { public static void processElements(List<?> elements) { for (Object element : elements) { // 处理元素,但不知道元素的实际类型 } } } ``` 在这个例子中,`processElements`方法可以接受任何类型的`List`对象作为参数,但在方法内部,我们只能将元素当作`Object`类型来处理。 使用通配符的注意事项: - 不能实例通配符。 - 不能使用带有通配符类型作为方法参数类型,因为这会导致在调用时出现类型安全问题。 - 如果要向集合中添加元素,那么只能添加`Object`类型的元素,因为编译器不知道集合中具体存储的是哪种类型的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值