MST

星途 面试题库

面试题:Objective-C轻量级泛型语法使用限制之类型约束问题

在Objective-C轻量级泛型语法中,当定义一个泛型数组`NSArray<SomeClass *> *array`时,假设`SubClass`是`SomeClass`的子类,能否将`NSArray<SubClass *> *subArray`赋值给`array`?请说明原因及这种限制的作用。
46.1万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 能否赋值
    • 不能将NSArray<SubClass *> *subArray赋值给NSArray<SomeClass *> *array
  2. 原因
    • 在Objective - C轻量级泛型中,虽然SubClassSomeClass的子类,但泛型类型是不具备协变性的。从类型安全角度考虑,如果允许这种赋值,可能会导致运行时错误。例如,假设可以将NSArray<SubClass *> *subArray赋值给NSArray<SomeClass *> *array,那么代码中可能会从array中取出元素并当作SomeClass类型处理,但实际元素是SubClass类型。如果后续代码对这些元素进行只适用于SomeClass的操作(而SubClass没有重写这些操作),就可能引发运行时错误。
  3. 这种限制的作用
    • 增强类型安全性:这种限制确保了在编译期就能检测出类型不匹配的问题,防止在运行时因为错误的类型操作而导致崩溃。通过严格限制泛型类型的赋值,开发者可以更准确地处理数据类型,减少潜在的错误。
    • 明确代码意图:限制这种赋值使得代码的类型意图更加清晰。开发者必须清楚知道数组中元素的确切类型,而不是依赖于不明确的类型转换,从而提高代码的可读性和可维护性。