详解Kotlin中怎样完成相似Java或C#中的静态要领【C#.Net教程】,Kotlin,Java,C#

NET ytg3114 11个月前 (11-27) 372次浏览 0个评论 扫描二维码

Kotlin中怎样完成相似Java或C#中的静态要领,本文总结了几种要领,分别是:包级函数、伴生对象、扩大函数和对象声明。这须要人人依据差别的状况举行挑选。

人人能够在收集上搜到不少如许的文章,官方引荐是包级函数,也有人说用伴生对象(companion class)。这些都是不错的挑选,但并不完美,我们在差别的状况下有更好的挑选。我总结了几种要领,分别是:包级函数、伴生对象、扩大函数和对象声明。这须要人人依据差别的状况举行挑选。

一、包级函数

Kotlin和Java及C#差别的是,能够在包内里直接声明函数。做法和类中是一样的,这里就不多说了,的确是一个非常好的挑选。适用于函数不须要不包内部的类举行数据同享的要领。

二、伴生对象

从语义上来说,伴生函数与Java中静态要领最为邻近,所以用伴生对象完全能够完成Java中静态类的一切内容。但在Java中运用静态要领偶然是没有办法的挑选,在Kotlin中伴生对象只是我们的一种挑选。下面我就引见一下伴生对象。
人人在运用Java的时不知有无注重到,Java类中的静态变量及要领是在什么时候初始化的?是在静态要领第一次挪用时照样在响应的Java类被加载时?答案是在Java类被加载时(也就是说假如你挪用过Java类中的实例变量及要领后,纵然你没有运用静态变量及要领,静态变量已初始化了)。这类征象用伴生来形貌是否是很贴切。

在Kotlin中,以为一个类中有两类东东,一类是Java类中的实例变量及要领,另一类是Java类中的静态变量及要领。Kotlin将静态实例及要领一致打包到一个伴生类中,就是这个模样啦。下面给出一个例子:

fun main(args: Array<String>) {
 Books.getBestSellers()
}
class Books(var name: String, val page: Int) {
  fun getWordCount()=page*100
  companion object ComBooks{
    var bestSellers=arrayOf("Harry Potter\r\t","Lord of the Rings\r\t")
    fun getBestSellers() {
      bestSellers.forEach{v->println(v)}
    }
  }
}

伴生类是用companion来声明的,他在伴生对象地点的类被加载,伴生对象被初始化,与Java静态成员一样。其能够匿名或许与包括他的类类名雷同。挪用有两种: Books.ComBooks.getBestSellsers()?Books.getBestSellsers()?。

三、扩大函数

在Java中,我们经常常使用写Utils类,这些类每每都是针对某一个对象对其功用举行与本身顺序相匹配的操纵。个中的要领以静态要领占多数,比方说:

public class Utils {

  public static boolean isEmpty(String string){
    return string != null && string.length() == 0;
  }

  public static boolean isWeakEmpty(String string){
    return isEmpty(string) && string.trim().length() == 0;
  }
}

我们固然能够用上面的两种要领来完成这些静态要领,然则我们有更好的要领。

fun String.isEmpty() = this != null && this.length == 0;

fun String.isWeakEmpty()= this.isEmpty() && this.trim().length == 0

上面两行代码给String这个类扩大了两个函数,这两个函数就能够像其原生函数一样挪用,代码非常幽美。实在扩大函数并没有修正String类内部的东东,也只是给String加了两个静态函数,但比拟Java的Utils类,可读性有了非常大的进步。

四、对象声明

继承斟酌上面的Utils类,这个类中一切的要领(偶然也有可能有变量)都是静态的,这个要领基础没有必要实例化,在Java中我们常常将此品种声明为静态类,在Kotlin中针对这类状况有无好的对应计划呢?有无比伴生对象更好的计划呢?固然是有的,对象声明就是一种。

对象声明非常好明白,就是用object关键字声清楚明了一个对象,对象内里能够用变量也能够有要领,如:

object AppInfo{
  var AppName = "Kotlin Message"
  var AppAuthor = "Riley Ge"
  fun toSimpleString() {
    println("AppName:$AppName,AppAuthor:$AppAuthor") 
  }
}

发明Kotlin的对象真是壮大!有一点人人注重一下,AppInfo是在第一次被接见到时耽误初始化的,也就是说在对象声明时AppInfo并没有初始化。

五、总结

说了这么多要领,如今没有人在忧郁Kotlin没有静态要领了吧,Kotlin没有只是由于他能够做的更好。而且Kotlin也给了人人更多的挑选,人人能够依据本身的实际状况选用适宜的要领,让本身的代码高效而幽美。

以上就是详解Kotlin中怎样完成相似Java或C#中的静态要领的细致内容,更多请关注ki4网别的相干文章!


搜讯息 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解Kotlin中怎样完成相似Java或C#中的静态要领【C#.Net教程】,Kotlin,Java,C#
喜欢 (0)
[1353713598@qq.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址