Java编程思想之范型(1)

本文深入探讨Java范型的基础知识及复杂用法,包括List泛型的实例化、泛型参数的限定、类型通配符的使用等,旨在帮助程序员理解和掌握Java范型,提升编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java范型是在Java5.0(1.5)版本中提出的,虽然Oracle已经发布了Java 1.9,Java 12的feature也已经在讨论中,但对于很多程序员来讲,对范型的理解和运用并不好,接下来的系列文章带大家一起深入理解Java范型。该系列问题第一篇先请感兴趣的同学看一些范型相关的问题,答案随后给出。

1、定义两个List:

List<Number> numbers = newArrayList<Number>();
List<Integer> integers = new ArrayList<>();

有个方法:

public static void printItem(List<Number>list) {
      for (Numbernumber : list) {
           System.out.println(number+ "");
      }
}

问:printItem(numbers)和printItem(integers)是否有问题?

2、声明一个List<Object> objectList =new ArrayList<>();以下选项哪些是正确的?

1) list.add(2L);

2) list.add(1);

3) list.add(1.0);

4) list.add(null);

5) list.add(new Object());

3、声明一个list,List<?>list = new ArrayList<>();以下语句哪些是对的?

1) list.add("a");

2) list.add(1);

3) list.add(new Object())

4) list.add(null);

4、针对上一问题,如果把list改为List<Object>list = new ArrayList<>();4个选项哪些是正确的?

5、声明一个List<? extends Number>extendsNumberList = new ArrayList<>();以下选项哪些是正确的?

1) list.add(2L);

2) list.add(1);

3) list.add(null);

6、声明一个List<? super Number> superNumberList= new ArrayList<>();以下选项哪些是正确的?

1) list.add(2L);

2) list.add(1);

3) list.add(1.0);

4) list.add(null);

5) list.add(newObject());

7、通过上述两题,请说出在范型中extends和super关键字的用法,可以通过一个具体的类来说明,例如List<?extendsNumber> vs List<? super Number>

8、声明一个List<Integer> intList = new ArrayList(),以下代码片段编译、执行都正常吗:

if(intList instanceof List){
    System.out.println("List<Integer> is list");
}

9、声明一个List<Integer> intList = new ArrayList(),代码片段编译、执行都正常吗:

if(intList instanceof List<Integer>){
    System.out.println("List<Integer> is list");
}

10、Java引入范型(Generics)的目的有哪些?

11、以下代码片段编译、运行是否有问题?

public class GenericTest{
    interface Int{
        void m1();
    }
    static class Clz{
        void m2(){
            System.out.println("in Clz m2");
        };
    }
    static class Gclz<T extends Clz & Int >{
        void printClz(T t){
            System.out.println("T:" + t.getClass().getName());
            System.out.println("T:" + t.getClass().getSimpleName());
            t.m1();
            t.m2();
        }
    }
    static class AnyClz extends Clz implements Int{
        @Override
        public void m1() {
            System.out.println("in AnyClz m1");
        }
    }
    public static void main(String ... args){
        AnyClz anyClz = new AnyClz();
        Gclz<AnyClz> gclz = new Gclz<>();
        gclz.printClz(anyClz);
    }
}

12、如下两个方法签名能否定义在同一个类中,为什么?

public static void printList(List<?> list){...}
public static void printList(List<Object> list){...}

13、定义一个List<Integer>list = Arrays.asList(5,6),调用上题中定义的两个方法打印list元素,是否有问题?

加入公众号获取上述问题答案:

码农走向艺术

加入“Java编程思想读书会”微信群,和一群技术专家们切磋技艺:

 

基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值