通用编程是否必要?

时间:2014-01-25 07:02:35

标签: java objective-c generics type-safety static-typing

我正在阅读this book,并且它正在进行静态输入,在阅读完一章之后,我理解为:

  • OOP中的静态类型定义为显式声明对象是其实例的类,因此它是预先确定的(在编译时,在运行时之前,即Foo var)。
  • 与此相反的是泛型编程,其中对象的实际id尚未确定(即id var)。
  • 要记住的是静态输入永远不需要(直接来自本书),它只会提高可读性,并通过显示对象可以做什么和不能做什么,它能“看到”的内容来简化调试过程。 / LI>
  • 然而,通用编程对于数组这样的东西有时是必要的,你可能需要...... 这就是我感到困惑的地方。它实际上是必要吗?

我知道在Java中你可以强制执行数组中包含的对象类型,例如:ArrayList<Double>,但是在Objective-C中,我对此做了很少的研究,没有这样的方法因此,所有NSArray在编译时都包含id

如果这个功能(奇怪的称为泛型,即使它是静态类型而非泛型类型)在Objective-C中不可用,那是否意味着有时需要泛型编程?

1 个答案:

答案 0 :(得分:1)

是的,无论何时需要编写需要在多种类型上操作的内容而不需要在编译时知道类型,都需要进行泛型输入。

虽然Objective-C本身不包含泛型,但Ids和void *基本上是相同的。您可以编写一个接受void *或Id的方法并对其进行一些处理。在调用该方法之前,您将对要操作的对象上的void *进行显式强制转换。

编辑:例如,如果你想编写一个制作任何类型对象的浅层副本的方法,你会怎么做?你必须做copy(void* src,void* dest, int size)之类的事情。没有泛型就没有办法做到这一点。