web-dev-qa-db-fra.com

Comment définir des interfaces dans Dart?

En Java, je pourrais avoir une interface IsSilly et un ou plusieurs types concrets qui l'implémentent:

public interface IsSilly {
    public void makePeopleLaugh();
}

public class Clown implements IsSilly {
    @Override
    public void makePeopleLaugh() {
        // Here is where the magic happens
    }
}

public class Comedian implements IsSilly {
    @Override
    public void makePeopleLaugh() {
        // Here is where the magic happens
    }
}

Quel est l'équivalent de ce code dans Dart?

Après avoir lu les documents officiels sur les classes, il ne semble pas que Dart ait un type natif interface. Alors, comment le Dartisan moyen accomplit-il le principe de ségrégation des interfaces?

34
IAmYourFaja

Dans Dart, il existe un concept de interfaces implicites .

Chaque classe définit implicitement une interface contenant tous les membres d'instance de la classe et de toutes les interfaces qu'elle implémente. Si vous souhaitez créer une classe A qui prend en charge l'API de classe B sans hériter de l'implémentation de B, la classe A doit implémenter l'interface B.

Une classe implémente une ou plusieurs interfaces en les déclarant dans une clause implements puis en fournissant les API requises par les interfaces.

Ainsi, votre exemple peut être traduit dans Dart comme ceci:

abstract class IsSilly {
  void makePeopleLaugh();
}

class Clown implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

class Comedian implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}
61
Alexandre Ardhuin

Dans Dart, chaque classe définit une interface implicite. Vous pouvez utiliser une classe abstraite pour définir une interface qui ne peut pas être instanciée:

abstract class IsSilly {
    void makePeopleLaugh();
}

class Clown implements IsSilly {

    void makePeopleLaugh() {
        // Here is where the magic happens
    }

}

class Comedian implements IsSilly {

    void makePeopleLaugh() {
        // Here is where the magic happens
    }

}
8
Pixel Elephant

La confusion est généralement due au fait qu'il n'existe pas l '"interface" Word comme Java et d'autres langages. Les déclarations de classe sont elles-mêmes des interfaces dans Dart.

Dans Dart, chaque classe définit une interface implicite comme d'autres le disent. Alors ... la clé est: les classes doivent utiliser le mot-clé implements pour pouvoir utiliser une interface.

abstract class IsSilly {
  void makePeopleLaugh();
}

//Abstract class
class Clown extends IsSilly {   
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}

//Interface
class Comedian implements IsSilly {
  void makePeopleLaugh() {
    // Here is where the magic happens
  }
}
5
josedlujan

abstract class ORMInterface {
  void fromJson(Map<String, dynamic> _map);
}

abstract class ORM implements ORMInterface {

  String collection = 'default';

  first(Map<String, dynamic> _map2) {
    print("Col $collection");
  }
}

class Person extends ORM {

  String collection = 'persons';

  fromJson(Map<String, dynamic> _map) {
    print("Here is mandatory");
  }
}

0
Pablo Papalardo