当前位置: 首页 > wzjs >正文

手机网站设计框架做卖蜂蜜的网站计划书

手机网站设计框架,做卖蜂蜜的网站计划书,深圳市龙岗区住房和建设局,晋江论坛手机版在代码不关注具体的数据类型而关注逻辑本身时,我们通常希望使用一个通用的模版——泛型generic。例如:实现一个通用的比大小方法,关注的是比较算法本身,而非比较的对象的类型,不管是小数、整数还是复数 泛型的顶层设计…

在代码不关注具体的数据类型而关注逻辑本身时,我们通常希望使用一个通用的模版——泛型generic。例如:实现一个通用的比大小方法,关注的是比较算法本身,而非比较的对象的类型,不管是小数、整数还是复数
泛型的顶层设计是对类型进行参数化
泛型是为了减少程序员的负担,编写程序更灵活方便。但这必然在编译时或者运行时增加了复杂度

java 泛型实现——“装箱”

先简单了解java的泛型实现

“装箱”,就是擦除原类型,统一类型,参数装到Object箱子里,就都变成了Object实例

一个泛型类的所有实例在运行时具有相同的运行时类(class),而不管他们的实际类型参数,如下例所示

List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); // true

这是为什么呢?也是装箱的缘故
因为java的泛型是通过编译器擦除泛型的类型信息实现的,比如说一个List<String>类型被转换为List<Object>,一个List<Integer>也会被转换为List<Object>。所有对类型变量的引用被替换成类型变量的上限(通常是Object),换句话说,所有的参数都由Integer、String等具体类型的实例对象转换成统一的Object对象——装箱
编译器会将泛型函数转换成不带任何类型参数的具体实现,类型参数在运行时并不存在,因此泛型类的实例在运行时具有相同的运行时类。注意,这样一来也不能依靠类型参数进行类型转换,类型参数在编译阶段就被干掉了
如,泛型函数badCast不能依靠类型参数T做类型转换

  <T> T badCast(T t, Object o) {return (T) o; // unchecked warning}

java中类的静态变量和方法在所有的实例间共享,这就是为什么在静态方法或静态初始化代码中或者在静态变量的声明和初始化时使用类型参数(类型参数是属于具体实例的)是不合法的原因

golang 泛型实现

generic functions and generic types

// generic functions
func f [T1, T2 any](x int, y T1) T2 {...
}// generic types Vector is a name for a slice of any element type.
type Vector[T any] []T

几个相关markdown

  • https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
  • https://github.com/golang/proposal/blob/master/design/generics-implementation-stenciling.md
    stencile 钢印,在编译时为泛型支持的每一种类型都生成一份函数实例
type Op interface{int|float
}
func Add[T Op](m, n T) T {return m + n
}
// 生成后 =>
func Add[go.shape.int_0](m, n int) int{}
func Add[go.shape.float_0](m, n float) float{}

也叫单态化,很好理解

  • https://github.com/golang/proposal/blob/master/design/generics-implementation-dictionaries.md
    当为泛型函数生成实例的时候,会唯一生成一个实例函数。该实例函数会擦除泛型函数的类型信息,确保传递给实例函数的参数都是统一类型的通用对象,java的Object、golang的interface{}都是统一类型;同时新增一个指向字典类型的指针(*dictionary)作为参数
type dictionary struct {T1 *runtime._typeT2 *runtime._type...
}

泛型函数f的dictionary需要包含如下信息:

  • The first thing that the dictionary will contain is a reference to the runtime._type for each parameterized type
  • Contain a *runtime._type for each of the types mentioned in the body of f which are derived from the generic parameter types.
  • Subdictionaries. If generic_f calls other functions, it needs a dictionary for those calls.
  • Helper methods. The dictionary should contain methods that operate on the generic types.
  • Stack layout. f needs to allocate stack space for any temporary variables it needs. Some of those variables would be of generic type, so f doesn’t know how big they are. It is up to the dictionary to tell it that.
  • Pointer maps. Each stack frame needs to tell the runtime where all of its pointers are.

总之,dictionary包含了原始的类型信息、方法信息、子字典等元数据,使得泛型函数实例在执行内部逻辑时可以“有法可依”。dictionary提供了执行依据

golang综合使用了stencile和dictionary方法来实现泛型,见下:
https://github.com/golang/proposal/blob/master/design/generics-implementation-gcshape.md
概括起来就是:

  • 采用模版印刷的方式为具有相同gcshape的类型复制一份模版函数。
  • 泛型函数调用时,都会增加一个参数,用来传递字典,由编译器在编译阶段添加,用户无感知。
  • 使用字典来区分相同gcshape类型的不同行为 。


喜欢的朋友记得点赞、收藏、关注哦!!!


文章转载自:

http://0Fi1sf3v.mpdwn.cn
http://xkk3xtv6.mpdwn.cn
http://b79VdZAd.mpdwn.cn
http://ycvijtmG.mpdwn.cn
http://QtfcuNRX.mpdwn.cn
http://Fh3COkOr.mpdwn.cn
http://pcr4olPk.mpdwn.cn
http://S1daSMwp.mpdwn.cn
http://ltMwGYPe.mpdwn.cn
http://Ahjv6FLd.mpdwn.cn
http://my1vhFX4.mpdwn.cn
http://mg0o09Ng.mpdwn.cn
http://5FPy4ZD5.mpdwn.cn
http://9rO7it5m.mpdwn.cn
http://9NDPqOxM.mpdwn.cn
http://lVFQKCWL.mpdwn.cn
http://s78uJ2Ev.mpdwn.cn
http://w2MnNpB6.mpdwn.cn
http://9oc2RyLt.mpdwn.cn
http://z2wTDSmC.mpdwn.cn
http://BRokR4D8.mpdwn.cn
http://5pOIbqJq.mpdwn.cn
http://jrGQEWI5.mpdwn.cn
http://muVHvmOV.mpdwn.cn
http://gETlvIDj.mpdwn.cn
http://q4nJjyg7.mpdwn.cn
http://u0E2aIQe.mpdwn.cn
http://MPKCI3Ms.mpdwn.cn
http://VQ3Lf21h.mpdwn.cn
http://ck5iG640.mpdwn.cn
http://www.dtcms.com/wzjs/652876.html

相关文章:

  • 如何建立商城网站山东省建设执业资格注册中心网站
  • 网站怎么做前后台存取平面创意设计
  • wordpress 总站模板内蒙住房和城乡建设部网站
  • 手机网站demo博客网站开发背景及作用
  • 网站更换域名注意事项html5 手机端网站
  • 成都网站建设设计公司排名织梦技术网站模版
  • 北京网站快速备案转换短链接平台
  • 深圳设计品牌网站无锡做设计公司网站
  • 柳传志 潘石屹做水果网站东莞公司做网站
  • 社交网站开发教程2015年做哪个网站致富
  • 许昌做网站公司报价手机wap网站模板下载
  • 做网站公司天津sem和seo的工作
  • 深圳集团网站建设公司好个体户查询系统官网
  • wordpress网站工具栏建设 大型电子商务网站
  • 河北省住房和城乡建设部网站站长工具查询seo
  • 甜品网站网页设计代码产品故事软文案例
  • 微商如何做网站引流峰峰专业做网站
  • 网站怎么制作视频设计之家软件
  • 公司网站规划wordpress对seo
  • dw个人网站设计模板免费杭州装饰装潢公司10大品牌
  • 企业站网站树莓派3 部署wordpress
  • 400网站建设电话wordpress 古典
  • 询价网站哪个好赣州微信公众号制作
  • 百度优化只做移动网站没有pc站新浪sae安装wordpress
  • 新闻发稿发布平台seo公司后付费
  • kkday是哪里做的网站开发网站开始的工作
  • wdlinux 默认网站免费建立网站步骤
  • 网站分页符怎么做宣传片制作公司有哪些公司
  • 做网站推广汉狮网络烟台网站排名优化公司哪家好
  • 上海响应式网站设计网站建设步骤详解视频教程