2016-08-03 4 views
3

私がDartで理解している限りでは、抽象クラスを使用して "interfaces"または "protocols"(objective-cから来た場合)を宣言することは可能です。 とにかく、抽象クラス/インタフェースでオプションのメソッドを宣言する方法を見つけるのに問題があります。抽象クラスでオプションとしてメソッドを宣言する

私は抽象クラスでのメソッドを宣言し、具体的なクラスBを実装してみましょう場合、私は、コンパイラで警告が表示されます。 私はオプションを宣言することができる、または少なくとも私のインターフェイスを実装するクラスで "再宣言"する必要なく、デフォルトの実装を提供することができるようにしたいと思います。

abstract class A{ 
    void abstractMethod(); 
} 

class B implements A{ 
//not implementing abstract method here gives a warning 
} 

答えて

2

これはインターフェイスの仕組みではありません。あなたのクラスがインターフェイスを実装すると言ったら、これが何をしなければならないのです。それはoptionalMethodを実装する必要がありA1を実装するために述べている場合にのみ、

あなたはインターフェースに

abstract class A { 
    void abstractMethod(); 
} 

abstract class A1 extends A { 
    void abstractMethod(); 
    void optionalMethod(); 
} 


class B implements A { 
//not implementing abstract method here gives a warning 
} 

を分割することができます。

代わりにあなたが

abstract class A{ 
    void abstractMethod(); 
    void optionalMethod(){}; 
} 

class B extends A { 
//not implementing abstract method here gives a warning 
} 

抽象クラスを拡張することができますのみabstractMethodAが実装を提供していないので、上書きする必要があります。

+0

私はあなたのソリューションを理解し、 "概念"、それに同意します。しかし私の質問は、Dartでこの動作を達成する方法があるかどうかを正確に理解するために行われました。 objective-cでは、(プロトコルと呼ばれていても) "インタフェース"でメソッドを宣言することができます。このようにして、アナライザは不足している実装に不平を言うことはありません。 ダーツでそのような行動を望んでいたが、明らかにあなたの答えで判断することはできません。 –

+0

私は確かにそこにないと確信しています –

1

クラスで定義された抽象メソッドは、オプションとしてマークすることはできません。 (少なくとも普通のDart言語では、このようなものをサポートする注釈はわかりません)。

インタフェースを実装するクラスは、すべての抽象メソッドの実装を提供する必要があります。そのメソッドが利用できないことを示すためにエラーをトリガーします。

  • スローUnimplementedError実装クラスが不完全であり、適切な実装は、実装クラスがメソッドを実装することを意図していない場合は、後で

  • スローUnsupportedError追加する場合。

UnimplementedErrorUnsupportedErrorを実装することに注意してください。

明らかに実装しないことを賢明に選択する必要があります。コード内に共有されることが意図されていない場合は、明示的に必要とされているメソッドの実装のみを取り除くことができます。他の人と共有することを目的とした図書館パッケージに含まれている場合は、メソッドを実装しないようにする必要があり、その理由を十分に文書化する必要があります。

例コード:

abstract class A { 
    void abstractMethod(); 
} 

class B implements A { 

    void abstractMethod() { throw new UnimplementedError(...); } 

    // or 

    void abstractMethod() { throw new UnsupportedError(...); } 
} 

参照:

https://api.dartlang.org/stable/1.18.1/dart-core/UnimplementedError-class.html https://api.dartlang.org/stable/1.18.1/dart-core/UnsupportedError-class.html

関連する問題