web-dev-qa-db-ja.com

Dartでインターフェースを定義する方法は?

Javaでは、インターフェースIsSillyと、それを実装する1つ以上の具象型があるとします。

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
    }
}

Dartのこのコードに相当するものは何ですか?

クラスで公式の docs を熟読した後、Dartにネイティブのinterfaceタイプがあるように見えません。では、平均的なDartisanはどのようにしてインターフェース分離の原則を実現するのでしょうか。

34
IAmYourFaja

Dartには 暗黙のインターフェース の概念があります。

すべてのクラスは、クラスのすべてのインスタンスメンバーと、それが実装するすべてのインターフェイスを含むインターフェイスを暗黙的に定義します。 Bの実装を継承せずにクラスBのAPIをサポートするクラスAを作成する場合、クラスAはBインターフェースを実装する必要があります。

クラスは、implements句でそれらを宣言し、インターフェイスに必要なAPIを提供することにより、1つ以上のインターフェイスを実装します。

だからあなたの例はこのようにダートで翻訳することができます:

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

Dartでは、すべてのクラスが暗黙のインターフェースを定義します。抽象クラスを使用して、インスタンス化できないインターフェースを定義できます。

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

混乱は通常、Javaや他の言語のようなWordの「インターフェース」が存在しないためです。クラス宣言自体がDartのインターフェースです。

Dartでは、他の人が言うように、すべてのクラスが暗黙のインターフェースを定義します。したがって、重要なのは、クラスがインターフェースを使用できるようにするには、implementsキーワードを使用する必要があります。

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