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はどのようにしてインターフェース分離の原則を実現するのでしょうか。
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
}
}
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
}
}
混乱は通常、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
}
}
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");
}
}