Object în Dart

Clasa de bază a tuturor claselor Dart, cu excepția lui Null; runtimeType dă tipul real al unui obiect.

Sintaxă
class Object
Type get runtimeType

Ce face Object

Orice valoare din Dart, în afară de null, este un Object: numere, texte, liste, funcții și obiectele claselor tale. O clasă fără extends extinde automat Object. De aceea orice obiect are metodele definite aici: ==, hashCode, toString(), noSuchMethod și runtimeType.

O variabilă de tip Object poate ține orice valoare nenulă, dar poți folosi direct doar metodele lui Object. Pentru restul verifici tipul cu is, iar Dart „promovează” variabila la tipul găsit. Dacă vrei să accepți și null, folosește Object?, tipul de sus al ierarhiei.

runtimeType returnează tipul real al obiectului în timpul rulării, ca obiect Type. Este util la depanare (print(x.runtimeType)). Pentru decizii în cod folosește is, care ține cont și de subclase.

Ce returnează

runtimeType: un Type.

Exemple

Exemplul 1: Orice valoare este un Object

class Student {
  final String nume;
  Student(this.nume);
}

void main() {
  var valori = <Object>[42, 3.14, 'Iași', true, [1, 2], {'a': 1}, Student('Ana'), print];
  for (var v in valori) {
    print(v.runtimeType);
  }
}

Rezultat

int
double
String
bool
List<int>
_Map<String, int>
Student
(Object?) => void

Exemplul 2: Verificarea tipului cu is

După if (v is String), Dart știe că v este text și permite v.length.

String descrie(Object? v) {
  if (v == null) return 'nimic';
  if (v is int) return 'întreg, dublul este ${v * 2}';
  if (v is String) return 'text cu ${v.length} litere';
  if (v is List) return 'listă cu ${v.length} elemente';
  return 'alt tip: ${v.runtimeType}';
}

void main() {
  for (var v in [7, 'Brașov', [1, 2, 3], 2.5, null]) {
    print(descrie(v));
  }
}

Rezultat

întreg, dublul este 14
text cu 6 litere
listă cu 3 elemente
alt tip: double
nimic

Greșeli frecvente

  • Declari variabile Object și apoi apelezi metode specifice: Object x = 'Ana'; x.length nu compilează. Verifică întâi cu is String.
  • Compari tipuri cu x.runtimeType == int. Nu funcționează pentru subclase și nici pentru tipuri interne (de exemplu listele au tipuri reale ca List<int>). Folosește x is int.

Comenzi înrudite

  • Object.toString: Returnează textul care descrie obiectul; îl folosesc print și interpolarea. Îl suprascrii în clasele tale.
  • Object.hashCode: Un număr asociat obiectului, folosit de Set și Map; obiectele egale cu == trebuie să aibă același hashCode.
  • Type: Un obiect care reprezintă un tip Dart, obținut scriind numele tipului sau cu runtimeType.
  • Object?: Tipul de bază al tuturor valorilor din Dart, inclusiv null; varianta sigură a lui dynamic.
  • is și is!: Verifică la rulare dacă o valoare are un anumit tip; după verificare, variabila poate fi folosită ca acel tip.