关于type和interface的思考
Willem Zhang Lv6

go语言中有type和interface两种对变量的约束方法(在java中是对对象进行两方面的约束)

存在两种约束方法的原因是因为想从两个方面束缚变量:其中一个方面是束缚变量的类型(有可能是函数类型)和结构,此时用type定义一个变量类型,那么接收到这种变量类型的任何一个变量得到的都是结构相同,类型相同的变量,所以可以对这种类型的变量做批量的处理,避免由于哪个属性缺失和属性的类型不同造成错误(属性有可能是函数)
另一个方面是束缚变量的方法(go中可以给类型定义方法,此类型的变量可以通过点调用这个方法,实质是将此类型的变量的值或地址值传给这个方法(java是调用此类的实例对象的方法)),约定一个interface,实现了这个interface的类型的变量就拥有了这个interface的方法,那么得到这种实现了特定接口的类型的变量就能够都调用相同的方法,避免了调用未定义的方法造成的错误

总结

  1. 想要获得特定的属性,就对变量/对象的类型进行约束,方法是对type/class属性的类型做约束。
  2. 想要调用特定的方法,就对变量/对象的方法进行约束,方法是对type/class的方法使用interface进行约束,使得type/class的方法是interface的子集。

而第一点所说的属性有可能是函数类型,所以相对interface来说要严格。
一个变量或对象只要有interface里面的全部方法,那么这个变量或对象就实现了这个interface,就可以被说成是这个interface。

  • Post title:关于type和interface的思考
  • Post author:Willem Zhang
  • Create time:2022-05-08 21:25:29
  • Post link:https://ataraxia.top/2022/05/08/关于type和interface的思考/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments