首页 > 其他分享 >9.23scala中的apply和equal改写

9.23scala中的apply和equal改写

时间:2024-09-26 12:55:10浏览次数:11  
标签:9.23 obj String 对象 equal Stu new apply ID

Scala对象的创建

(1)new:使用new关键字创建类的对象

(2)伴生对象:使用object关键字创建一个单例对象

(3)apply:apply是一个方法,需要在伴生对象中实现这个方法

  能够不使用new关键字来创建对象

//创建类使用class

class Stu(var name:String,var gender:String,var ID:String){
  def sayHello(): Unit ={
    println(s"大家好,我是$name")
  }
}
//创建对象使用new

object Stu {
  //apply 回车
  def apply(name: String, gender: String, ID: String): Stu = {
    var p = new Stu(name, gender, ID)
    p //方法中的最后一个语句被自动当做return值
  }

  //def apply(name: String, gender: String, ID: String): Stu = new Stu(name, gender, ID)
}
object TestClassReview {
  def main(args: Array[String]): Unit = {
    var s1 = new Stu("小花","女","20145")
    println(s1.name)
    s1.sayHello()
  }

}

如何判断对象的所属类

方法1:对象.getClass()  使用反射机制判断Scala对象所属的类。

方法2:对象.isInstanceof[类]  判断对象是否属于某一个类型,A.isInStanceof[B]表示判断对象A是否属于类型B,实际上是判断A是否是B或者B的子对象。如果返回true,则表示A是B的子对象;false,A不是B的子对象。

    //获取当前对象对应的类 ? 找爸爸
    // println(s1.getClass())
    println("s".getClass())
    println(100.getClass())

    //验证某个对象是不是某个类的实例 ? 亲子鉴定
    println(s1.isInstanceOf[Stu])
    println(100.isInstanceOf[Int])

能改写equals自定义判断对象是否相等

在Scala中有三种方法判断对象的相等性,这三种方法主要分为两大类,第一种和第二种为一类,第三种方法为另外一类。在大多数情况下(非空),equal方法和==比较的内容是相同的。三种判断方法如下:

(1)equal方法:相当于Java中的equal方法

(2)==与!=:相当于Java中的equal方法

(3)eq与ne:相当于Java中的引用(使用==判断引用)

  override def equals(obj: Any): Boolean = {
//    ID == obj.ID
//    true
//    随机的返回true false
//    random()的作用是产生一个0-10的随机数
//    1.自己等于自己
//    if(this == obj){
//      return true
//    }
    //2.同类比较
    if(obj != null && this.getClass() == obj.getClass()) {
      //自定义比较逻辑,这里假定:学号相等就是相等
      //把obj强制转换为当前的类型
      var s = obj.asInstanceOf[Stu]
      return s.ID == ID
    }
    //3.其他就是false
    false
    //random() > 0.5
  }
}

课后总结:

1.如何不使用new来定义对象?

在伴生对象中写一个apply,并返回伴生类的实例

2.如何判断一个对象所属的类?

方法1:对象.getClass()  使用反射机制判断Scala对象所属的类。

方法2:对象.isInstanceof[类]  判断对象是否属于某一个类型,A.isInStanceof[B]表示判断对象A是否属于类型B,实际上是判断A是否是B或者B的子对象。如果返回true,则表示A是B的子对象;false,A不是B的子对象。

3.如何判断两个对象是否相等?

4.如何改写equals?

在class中,用override def equals(obj:Any):Boolean = {true/false}

标签:9.23,obj,String,对象,equal,Stu,new,apply,ID
From: https://blog.csdn.net/2402_87076449/article/details/142448827

相关文章

  • 计算机复习9.23
    关系:一张扁平的二维表,关系应该具备每个分量都不可分的数据(1NF)候选码:某个属性组可以唯一标识一个元组,而其子集不能,候选码中的属性叫主属性主码:从候选码中选取一个称为主码全码:所有属性组合在一起作为这个关系的候选码传统集合:并,交,差,笛卡尔积,差专门关系云算:选择,投影,连接,......
  • 在Scala中,如何判断两个对象相等,覆写类equals方法
    覆写类equals方法overridedefequals(other:Any):Boolean={true/false}图书馆借书如何判断两条记录是不是一个同学借的?//约定:两个人的名字一样,就是一个人!就是相等的!!classStu(varname:String){//override:改写,覆写,重写。把之前的覆盖掉overridedefequals(......
  • 9.23 ~ 9.29
    9.23集训第一天。早晨因为太多人没拿早读资料被老登D了。不是哥们你不早说现在我上哪给你找资料去......
  • 9.23考试总结
    T1简单签到题,考虑一个点从开头移到结尾会减去小于它的数加上大于它的数。所以\(O(nlogn)\)求逆序对,然后\(O(1)\)计算一个数移到最后的答案。#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;#definelllonglongintn,a[N],sum[N],sh[N];llans,jg;......
  • dataframe的apply按行操作
    1.原始数据及要求+---------------+-----------+---------------+--------+|stock_name|operation|operation_day|price|+---------------+-----------+---------------+--------+|Leetcode|Buy|1|1000||CoronaMasks|Buy......
  • 2024.9.23校测
    T1题目描述如果你有一个长度为n的序列:\(a_1,a_2,a_3,\dots,a_n\),那么它的一个逆序对是一个二元组:\(<i,j>\)满足\(i<j\)且\(a_i>a_j\),其中\(i,j\in[1,n]\)。我们称一个序列所包含的逆序对的个数为这个序列的逆序对数。那么问题来了:我给出一个长度为n......
  • String.intern()方法、==、equals()、运行时常量池
    尽管在输出中调用intern方法并没有什么效果,但是实际上后台这个方法会做一系列的动作和操作。在调用”ab”.intern()方法的时候会返回”ab”,但是这个方法会首先检查字符串池中是否有”ab”这个字符串,如果存在则返回这个字符串的引用,否则就将这个字符串添加到字符串池中,然会返回这个......
  • 2024.9.23docker常用命令
    1.容器管理查看运行中的容器:dockerps查看所有容器(包括已停止的):dockerps-a启动容器:dockerstart<container_id或container_name>停止容器:dockerstop<container_id或container_name>重启容器:dockerrestart<container_id或container_name>删除......
  • 9.23 开发MES系统日志一
    今天初步了解了接下来需要开发的MES系统,根据五十页的文档提出了以下几个问题。1.系统功能与数据采集分析:文档详细描述了MES系统需要从人的角度和产品的角度采集各种数据,包括生产工序的接收数、完工转出数、合格数、工废数、退料数等,以及通过二维码扫描关联产品、人、设备、物料......
  • 9.23 csp
    今天模拟赛出了四道zroi的题,挺GG的。T1、奇观因为删除的边比较少,所以从m入手,f[i][j]表示长度为i,终点为j的链的方案数。C是长度为3的链,F是1条长度为3的链和2条长度为2的链。输出CCF即可GT2、铁路救命的签到题。因为每次合并时每走一个点就会减少一个点,所以我们......