Java List<Integer>能存字符串对象吗?

简介: Java List<Integer>能存字符串对象吗?

背景

今天在写代码时,想到一个有趣的面试题,List<Integer>能存String对象吗?

粗看好像问了一个Java语法相关的知识点,其实我想考的是你对Java泛型的理解。

回答不能,那么可以说对Java泛型几乎是没有理解,而仅仅回答能,也是远远不够的。

一、怎么存?

首先来讲讲怎么存,话不多说,直接上代码,也不复杂大家都能看懂。

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
 * @author Mark
 * @date 2022-11-27 17:37
 */
public class ListGeneric {
    private void genericTest() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        List<Integer> integerList = new ArrayList<>();
        integerList.add(1);
        Method method = integerList.getClass().getDeclaredMethod("add", Object.class);
        method.invoke(integerList, "String");
        System.out.println(integerList);
    }
}

我们通过反射来实现,最终打印输出的内容是[1, String],是不是有点匪夷所思。当然这里需要提一点,直接通过add方法来添加"String"字符串对象,显然是不可行的。

或许回答不能的,这个结论应该从这里来,市面上的idea在编写时也都会报错。

二、为什么能存?

关键点来了,我所期望的是面试者能提出泛型擦除,与Java的泛型只在编译期生效。

简单整个笔试可能出现的题,或许又能加深你对它的印象。

接着问,以下两个方法能否定义在同一个类的成员方法中,

public List<Integer> func(List<Integer> list) {
    return List.of(1);
}
public List<String> func(List<String> list) {
    return List.of("String");
}

显然也是不能的,另外有一点我可能还会问一下,以上代码入参一致的话是不是方法的重载?显然也不是,方法的重载不考虑返回值。

三、泛型存在的意义?

紧接着,又一个关键点来了,既然有擦除那么泛型存在的意义是?

1、泛型避免了代码在运行时才发现问题,例如上章节的例子。

2、如果都是使用Object基类替代,使用时需要强转,泛型减少了ClassCastException发生。

3、减少来自强制类型转换的性能消耗。

小结

每天一个小知识点,轻松带你了解真实的Java面试。

相关文章
|
16小时前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
6 1
|
14小时前
|
Java
java反射-获取类的Class对象方式
java反射-获取类的Class对象方式
3 0
|
17小时前
|
存储 Java 数据库连接
深入探索Hibernate与JPA:Java对象与数据库表的桥梁
【6月更文挑战第25天】Java ORM如Hibernate和JPA简化了数据库交互。在电商系统案例中,JPA注解如`@Entity`、`@Table`、`@Id`定义了对象-表映射。Hibernate利用这些定义实现持久化,如`Session.save()`保存用户对象至数据库,降低了复杂性并提升了开发效率。
|
1天前
|
Java
java实现字符串与十六进制字符串互转
java实现字符串与十六进制字符串互转
4 0
|
1天前
|
Java
java将字符串按照指定长度分割成字符串数组
java将字符串按照指定长度分割成字符串数组
5 0
|
1天前
|
Java
java操作list使用Stream
java操作list使用Stream
3 0
|
1天前
|
Java
使用java计算一个字符串中字母出现的次数
使用java计算一个字符串中字母出现的次数
3 0
|
1天前
|
算法 Java
Java数据结构与算法:字符串匹配算法之暴力匹配
Java数据结构与算法:字符串匹配算法之暴力匹配
|
1天前
|
算法 Java
Java数据结构与算法:字符串匹配算法之KMP算法
Java数据结构与算法:字符串匹配算法之KMP算法
|
Java Apache
Java 中 List 分片的 5 种方法!(5)
Java 中 List 分片的 5 种方法!(5)
269 0
Java 中 List 分片的 5 种方法!(5)