Java基础面试题(11)—Java(泛型)

前言

学习项目的过程中,我觉得自己有点太急功近利了一直跟着视频敲没有自己的思考(主要是最近在牛客读到了一位大佬👍👍👍,程序员牛肉的文章),🙌学技术不是一味的复制粘贴,特别是做项目,要边学边思考,一个功能的实现,我学会了什么技术,还有没有更好的可以替代它。

之前学的基础知识其实也没有学完,像集合,线程... 都还不知道是啥就开始学JavaWeb做项目了,在项目中使用队列存储我都一脸懵,在这里以问题的形式写一个学习笔记🤔,不仅仅是复习,也为以后的面试做准备,还有还有我的刷题网站是面试鸭呦🦆🦆🦆

这里写目录标题

一、什么是泛型?

复制代码
           泛型 = "参数化的类型"

意思是:把类型当作参数传进去,让代码更通用、更安全。

🌰 举个生活例子:

  • 普通水杯只能装水 → 不安全(万一倒进汽油就炸了)

  • 带标签的杯子写着"只装水" → 安全又明确

  • 泛型就像给容器贴上"类型标签"!

二、泛型解决什么问题?

❌ 没有泛型时的问题(JDK 1.5 之前)

java 复制代码
List list = new ArrayList();
list.add("Hello");
list.add(123);        // 可以加任意类型!
list.add(new Date());

// 取出来时,只能当成 Object
String s = (String) list.get(0); // 必须强制转换
Integer i = (Integer) list.get(1);

// 如果搞错了类型?
String bad = (String) list.get(1); // 💥 ClassCastException!运行时才报错!

问题总结:

类型不安全(运行时才出错)

需要频繁强转(麻烦又易错)

✅ 有了泛型后

java 复制代码
List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");

// 编译器就知道里面全是 String
String s = list.get(0); // ✅ 不用强转!

// 试图加其他类型?编译直接报错!
list.add(123); // ❌ 编译错误:不兼容类型

泛型的基本语法

1. 泛型类

java 复制代码
public class Box<T> {
    private T value;

    public void set(T value) {
        this.value = value;
    }

    public T get() {
        return value;
    }
}

// 使用
Box<String> stringBox = new Box<>();
stringBox.set("苹果");
String fruit = stringBox.get(); // 直接是 String

2. 泛型方法

java 复制代码
public static <T> void print(T item) {
    System.out.println(item);
}

// 调用
print("Hello");   // T = String
print(123);       // T = Integer

3. 泛型接口

java 复制代码
public interface Comparable<T> {
    int compareTo(T other);
}

public class Student implements Comparable<Student> {
    public int compareTo(Student other) {
        // 比较逻辑
    }
}

通配符(?)

1. 无界通配符 <?>

表示"某种未知类型",常用于只读场景。

java 复制代码
public void printList(List<?> list) {
    for (Object obj : list) {
        System.out.println(obj);
    }
    // 不能 add!因为不知道具体类型
    // list.add("x"); // ❌ 编译错误
}

⚠️泛型的限制(注意!)

1. 不能用基本类型

java 复制代码
List<int> list; // ❌ 错误!
List<Integer> list; // ✅ 正确(要用包装类)

2. 运行时类型会被擦除(类型擦除)

Java 泛型只在编译期有效,运行时所有泛型信息都会被擦掉!

java 复制代码
List<String> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();

// 运行时它们的类型都是 ArrayList!
System.out.println(list1.getClass() == list2.getClass()); // true

3. 不能创建泛型数组

java 复制代码
List<String>[] arr = new ArrayList<String>[10]; // ❌ 编译错误

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

...。。。。。。。。。。。...

...。。。。。。。。。。。...

相关推荐
sycmancia1 分钟前
Qt——自定义控件温度计
开发语言·qt
神奇小梵14 分钟前
安全和开发的需要了解的知识————下载内容的安全,和下载内容如何运行
android·windows·安全·个人开发
evans在进步22 分钟前
LeetCode 17:电话号码的字母组合——Java DFS 回溯法详解
java·leetcode·深度优先
2401_8504811725 分钟前
UVA10391
java
UQR32 分钟前
一、Java基础高频面试题
java·开发语言
AC赳赳老秦32 分钟前
网页公开附件自动采集:OpenClaw 批量下载页面内嵌 Word/Excel 附件,统一格式后结构化入库
java·python·word·php·excel·deepseek·openclaw
MoonBit月兔36 分钟前
MoonBit 受邀亮相 SPLASH/ISSTA 2026,与 Java、Rust、Eiffel、D 语言核心贡献者同场交流
开发语言·后端·rust
上海云盾商务经理杨杨38 分钟前
Tomcat 弱配置漏洞渗透实战!批量 getshell 高频漏洞
java·web安全·tomcat
必须会一定会40 分钟前
用纯 HTML/JS 做一个 AI 需求澄清器:把模糊想法转换成可执行任务书
开发语言·前端·javascript·人工智能·html·ai编程
10mAh1 小时前
【Linux】error while loading shared libraries 怎么解决?——ldd、RPATH 与动态链接排错
java·linux·前端