鸿蒙仓颉语言【类型class】

类与结构(class & struct)

面向对象的编程语言,必不可少的基础元素,类或者叫类型,在仓颉中类可以抽象(abstract)、继承(<:),公开(Public)或者私有(Private)。

  • 使用class关键字定义类,使用abstract关键字定义抽象类。类可以继承其他类,使用<:符号表示继承关系
  • class类修饰符为public、private,用于定义Class 是公开或者私有,类可以继承自其他类或接口,并且可以被其他类继承。
  • 类可以有初始化函init(Pram1,Pram2,...),反初始化函数为~init()。
  • 包含泛型的类在继承时候可以进行限定。

属性

mut关键字表明某个属性是可变的、可修改的,否则默认情况下都是不可变的。

如:

mut prop reading: Bool

public open mut prop currentReadOffset: Int64{} 

以下表示一个公开可读的属性,二个公开可以读写的属性,即可变的属性。

    public prop pointers: Iterator<BytesPointerMeta>{
        get(){
            buffer.pointers
        }
    }
    public mut prop currentReadOffset: Int64{
        get(){
            buffer.currentReadOffset
        }
        set(value){
            buffer.currentReadOffset = value
        }
    }
    public mut prop currentWriteOffset: Int64{
        get(){
            buffer.currentWriteOffset
        }
        set(value){
            buffer.currentWriteOffset = value
        }
    }

类型限定

在类继承时候可以对当前类型进行限定,如下:

public abstract class ByteBuffer <: Collection<Byte> & Hashable & Equatable<ByteBuffer> {}

抽象类ByteBuffer 同时继承Collection 类型以及 Hashable 、 Equatable 两个接口。

public class ByteBufferPool<T> <: Resource where T <: ByteBuffer {}

类型ByteBufferPool 继承自 Resource,其中T必须是ByteBuffer的子类。

反初始化成员函数~init()

在函数对象的声明周期的最后,即对象在被销毁之间,可以在~init()中进行明确的释放操作。不需要手动调用,基础语言运行时会自己调用。

public class Release{
 ~init(){
        doRelease(handle, shouldBeReleased, released)
    }

//releaseArrayRawData<Byte>(h) 系统函数
    private static func doRelease(handle: ?CPointerHandle<Byte>,
                                  shouldBeReleased: Bool, released: AtomicBool){
        if(shouldBeReleased && released.compareAndSwap(false, true)){
            if(let Some(h) <- handle){
                unsafe{releaseArrayRawData<Byte>(h)}
            }
        }
    }
}

类型扩展Extend

这是个非常厉害的特性,这个特性可以让你扩展已经存在的类型的能力,让这个类型拥有更多的能力,比如让这个类多实现一些接口,或者给其增加一些成员函数等。

extend Result<T> <: ToString where T <: ToString {
    public func toString(): String {
        match (this) {
            case Ok(v) => return v.toString()
            case Err(v) => return v.message
        }
    }
}

相关推荐

  1. 鸿蒙语言【泛型generic】

    2024-07-18 23:50:05       17 阅读
  2. 新型开发语言的试用感受-语言发布之际

    2024-07-18 23:50:05       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 23:50:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 23:50:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 23:50:05       58 阅读
  4. Python语言-面向对象

    2024-07-18 23:50:05       69 阅读

热门阅读

  1. 什么是CAP理论?

    2024-07-18 23:50:05       19 阅读
  2. Hive修改表中的某个值

    2024-07-18 23:50:05       23 阅读
  3. HTTP请求五类状态码详细介绍,以及部分处理思路

    2024-07-18 23:50:05       23 阅读
  4. SQL FOREIGN KEY

    2024-07-18 23:50:05       18 阅读
  5. MySQL——在查询中使用关键字

    2024-07-18 23:50:05       20 阅读
  6. 确定Python 数据的数据结构

    2024-07-18 23:50:05       22 阅读
  7. 深入了解Memcached:缓存技术的利器

    2024-07-18 23:50:05       23 阅读
  8. antlr4私人学习笔记

    2024-07-18 23:50:05       18 阅读
  9. python的with语句

    2024-07-18 23:50:05       22 阅读