继续学习枯燥的Dart语言语法,目前的耐得住寂寞是为了将来学得“爽”做准备的!!!
Dart 提供了 Exception 和 Error 类型, 以及一些子类型。还可以定义自己的异常类型。但是,Dart 代码可以抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者 Error 的对象。
其中常见的Exception如下:
所有的 Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常, 并且你不要求捕获任何异常【这个Kotlin也差不多】。
Dart 代码可以抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者 Error 的对象。
如果抛一个非error的呢?
还可以用精确异常:
也能这样写:
完整的写法可以如下:
使用命名构造函数可以为一个类实现多个构造函数, 或者使用命名构造函数来更清晰的表明你的意图。
一个重定向构造函数是没有代码的,在构造函数声明后,使用冒号调用其他构造函数。
其中要注意一个细节:
注意必须是final修饰变量,换成const或去掉都是要报错的:
有啥用呢?再来看:
这种写法在未来flutter的学习中会大量运用到的。
要记住这样的写法,因为在未来实际场景中会大量看到~~
代码来瞅一下:
比如说按摩可以有多个种类,咱们先来定义一个抽象的按摩类:
接下来来创建具体的子类,如下:
调用一下:
以上就是一种工厂方法的典型使用,需要特别注意:在Dart中木有interface关键字,abstract就可以当接口来用,下面再来看以继承的方式来使用:
这是第二种工厂模式的写法,对其有个大致印象既可,在之后的实际开发中会有用武之地滴。
实现call()方法可以让类像函数一样能够被调用。
下面以这个场景为例:
下面来看下代码,看mixin是个啥东东?
void main() {Bicycle().transport();Motocycle().transport();Car().transport();
}//交通抽象类
abstract class Transportation {void transport();
}//自行车
class Bicycle extends Transportation {String safeIndex() => "low";String powerUnit() => "2个轮子";String energy() => "脚蹬";@overridevoid transport() {print('Bicycle:npowerUnit: ${powerUnit()}, safeIndex: ${safeIndex()}, energy: ${energy()}');}
}//摩托车
class Motocycle extends Transportation {String safeIndex() => "low";String powerUnit() => "2个轮子";String energy() => "汽油";@overridevoid transport() {print('Motocycle:npowerUnit: ${powerUnit()}, safeIndex: ${safeIndex()}, energy: ${energy()}');}
}//汽车
class Car extends Transportation {String safeIndex() => "middle";String powerUnit() => "4个轮子";String energy() => "汽油";@overridevoid transport() {print('Car:npowerUnit: ${powerUnit()}, safeIndex: ${safeIndex()}, energy: ${energy()}');}
}
运行如下:
好,接下来要改造了,从上面的代码来看:
好,咱们将里面的行为再单独抽象一下,如下:
接下来咱们使用Mixin的方式来改造代码:
void main() {Bicycle().transport();Motocycle().transport();Car().transport();
}//交通抽象类
abstract class Transportation {void transport();
}//2个轮子
abstract class TwoWheelTransportation {String powerUnit() => "2个轮子";
}//4个轮子
abstract class FourWheelTransportation {String powerUnit() => "2个轮子";
}//低安全系数
abstract class LowSafeTransportation {String safeIndex() => "low";
}//中安全系数
abstract class MiddleSafeTransportation {String safeIndex() => "middle";
}//人工动力
abstract class BodyEnergyTransportation {String energy() => "脚蹬";
}//汽油动力
abstract class GasEnergyTransportation {String energy() => "汽油";
}//自行车
class Bicycle extends Transportation with LowSafeTransportation, BodyEnergyTransportation, TwoWheelTransportation {@overridevoid transport() {print('Bicycle:npowerUnit: ${powerUnit()}, safeIndex: ${safeIndex()}, energy: ${energy()}');}
}//摩托车
class Motocycle extends Transportation with LowSafeTransportation, GasEnergyTransportation, TwoWheelTransportation {@overridevoid transport() {print('Motocycle:npowerUnit: ${powerUnit()}, safeIndex: ${safeIndex()}, energy: ${energy()}');}
}//汽车
class Car extends Transportation with MiddleSafeTransportation, GasEnergyTransportation, FourWheelTransportation {String safeIndex() => "middle";String powerUnit() => "4个轮子";String energy() => "汽油";@overridevoid transport() {print('Car:npowerUnit: ${powerUnit()}, safeIndex: ${safeIndex()}, energy: ${energy()}');}
}
其运行结果跟之前是一样的:
这里还涉及到一个顺序问题,下面再来看下:
调用一下:
这个结果可以发现:
这俩打印又能说明啥现象呢?
这块东东先有个大体印象吧,没有真实的项目做为操练也不可以意会得非常深刻。。
Dart1.21开始可以使用泛型函数。
泛型函数可以在以下几个地方使用类型参数:
<1> 函数的返回值类型。
<2> 参数的类型。
<3> 局部变量的类型。
要在使用构造函数时指定一个或多个类型,可将类型放在类名称后面的尖括号<...>中。
实现泛型类型时,您可能希望限制其参数的类型,可以在<>里面使用extends,其实也就是泛型的协变跟逆变,但是在Dart中木有super限制,如下:
如何理解?看程序:
也就是说在Java中,可以测试对象是否为List,但无法测试它是否是List<String>。
pubspec.yaml声明需要引用的库,使用Packages get进行拉取。
那咱们来找一个三方库来使用一下,先上官网搜一下三方库:
所以咱们将其依赖添加至咱们的工程:
添加完依赖之后,就可以使用了,如下:
如何来引用咱们自己的Dart文件呢?下面新建待引用的Dart文件:
然后引用一下:
如果两个库有冲突的标识符,可以为其中一个或两个库都指定前缀,比如:MyLib1.dart 和 MyLib2.dart 都有一个名字为 MyLib 的类, 此时解决冲突就可以指定前缀来解决,如下:
如果只使用库的一部分功能,则可以选择需要导入的内容。
下面来演示一下:
这功能还挺灵活的。。
下面来使用一下,我们在请求完数据之后再来加载文件:
看下结果:
感觉Dart好强大呀,值得一学!!!
啥意思,比如说有三个Dart文件:
而mylib.dart利用part整合了tool.dart和util.dart文件的功能,最终我们使用时只要引用mylib则可以拥有三个文件的功能,如下:
咱们来试一下:
运行:
本文发布于:2024-02-01 00:42:28,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170671934832586.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |