MST
星途 面试题库

面试题:Java中接口与泛型结合时的类型安全问题

在Java中,定义一个带有泛型的接口`GenericInterface<T>`,要求实现类必须提供一个方法`process(T t)`,对传入的泛型对象进行处理。请写出接口定义以及一个实现类示例,并阐述如何确保类型安全。
47.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

接口定义

public interface GenericInterface<T> {
    void process(T t);
}

实现类示例

public class StringProcessor implements GenericInterface<String> {
    @Override
    public void process(String t) {
        System.out.println("Processing string: " + t);
    }
}

确保类型安全

  1. 编译期检查:Java的泛型是在编译期进行类型检查的。当定义实现类StringProcessor实现GenericInterface<String>时,编译器会确保所有调用process方法传入的参数都是String类型,如果传入其他类型,编译器会报错。
  2. 擦除机制:Java的泛型采用类型擦除机制,在运行时泛型类型信息会被擦除。但是通过编译期的严格类型检查,已经可以保证在程序运行前类型的正确性,避免了在运行时因为类型不匹配而产生的ClassCastException等错误。 例如,如果在main方法中有如下代码:
public class Main {
    public static void main(String[] args) {
        GenericInterface<String> processor = new StringProcessor();
        processor.process("Hello"); // 正确,传入String类型
        // processor.process(123); // 错误,编译器会报错,因为123不是String类型
    }
}

通过这种方式,Java泛型有效地确保了类型安全。