【Flutter/Dart】dynamic型とObject型の違い

今回はdynamic型Object型で宣言・定義した変数の違いについて紹介します。

どちらの型も初期化の値とは別の型を後から渡せる「動的型付け」になります。

\ 世界最大級のオンライン学習サービス /

目次

dynamic型とObject型の同じ点

dynamic any = 100;
any = 'Hello World';
print(any);

Object any2 = 100;
any2 = 'Hello World2';
print(any2);

//結果
//Hello World
//Hello World2

dynamic型とObject型はどちらも初期化した後に別の型の値を代入できます。

dynamic型とObject型の違い

nullを扱えるプロパティ・メソッドへのアクセス
dynamic型
Object型××

dynamic型とObject型の違いは主に上記の2つです。

dynamic型ではnullでも問題なし

dynamic any;
dynamic any2 = null;

dynamic型ではnullでもエラーは発生しません。

Object any;
Object any2 = null;
print(any);

//結果
//Error: The value 'null' can't be assigned to a variable of type 'Object' because 'Object' is not nullable.
//Error: Non-nullable variable 'any' must be assigned before it can be used.

一方でObject型ではnullだとエラーが発生します。

dynamic型ではプロパティ・メソッドにアクセスできる

void main() {
  dynamic object = Hello();
  object.hello();
}

class Hello {
  void hello() => print('Hello World');
}

//結果
//Hello World

dynamic型ではオブジェクト化したクラスのプロパティ・メソッドにできます。

void main() {
  Object object = Hello();
  object.hello();
}

class Hello {
  void hello() => print('Hello World');
}

//結果
//Error: The method 'hello' isn't defined for the class 'Object'.

一方でObject型でオブジェクト化したクラスのプロパティ・メソッドにはアクセスできません。

一緒に読みたい

参考

  • URLをコピーしました!
目次