对照JAVA学习Rust(09)--泛型

10 篇文章 1 订阅

1、泛型的作用

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。泛型变量固定了类型,使用的时候就已经知道是值类型还是引用类型,避免了不必要的装箱、拆箱操作。

2、泛型原理

Java的泛型是伪泛型。在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦除。 擦除去了泛型信息后保留原始类型(raw type),最后在字节码中的类型变量的真正类型。无论何时定义一个泛型类型,相应的原始类型都会被自动地提供。类型变量被擦除后,并使用其限定类型(无限定的变量用Object)替换。

Rust的所有的泛型参数都要提前声明:Point<T,U>。泛型可定义一或多个。每当我们将它与类型一起使用时,编译器都会生成针对该特定类型量身定制的枚举定义;如果我对于泛型的具体调用时会传入具体类型,编译器会将对应泛型转换为具体类型,与Java的泛型擦除类似

3、泛型的使用

Java的泛型实例

public class Test{    
  public static void main(String[] args) {    
    /**不指定泛型的时候*/    
    int i= add(1, 2); //这两个参数都是Integer,所以T为Integer类型    
    Number f=Test.add(1, 1.2);//这两个参数一个是Integer,以风格是Float,所以取同一父类的最小级,为Number    
    Object o=Test.add(1, "asd");//这两个参数一个是Integer,以风格是Float,所以取同一父类的最小级,为Object    
    
    /**指定泛型的时候*/    
    int a=Test.<Integer>add(1, 2);//指定了Integer,所以只能为Integer类型或者其子类    
    Number c=Test.<Number>add(1, 2.2); //指定为Number,所以可以为Integer和Float    
  }    
  
  public static <T> T add(T x,T y){    
    return x + y;    
  }    
}    

Rust泛型实例

struct Point<T, U> {
    x: T,
    y: U,
}

// 传入泛型方法的泛型并不一定是一致的,注意泛型名称的对应
impl<T, U> Point<T, U> {
    fn mixup<V, W>(self, other: Point<V, W>) -> Point<T, W> {
        Point {
            x: self.x, // T
            y: other.y, // W
        }
    }
}
//枚举定义中的泛型
enum Result<T, E> {
    Ok(T),
    Err(E),
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值