メインコンテンツにスキップ

ambiguous_extension_member_access

名前 '{0}' のメンバーが '{1}' および '{2}' に定義されており、どちらもより具体的ではありません。

名前 '{0}' のメンバーが {1} に定義されており、どれもより具体的ではありません。

説明

#

コードがオブジェクトのメンバーを参照する場合(例: o.m()o.m、または o[i])、その o の静的型がメンバー(例: m または [])を宣言していない場合、アナライザーは拡張機能でメンバーを検索します。たとえば、メンバーが m の場合、アナライザーは名前 m を宣言し、o の静的型を代入できる拡張型を持つ拡張機能を検索します。スコープ内にそのような拡張機能が複数ある場合、最も具体的な拡張型を持つ拡張機能が選択されます。

アナライザーは、どの拡張機能も他のすべての拡張機能の拡張型よりも具体的な拡張型を持たず、メンバーへの参照が曖昧になる場合にこの診断を生成します。

#

以下のコードは、E1 のメンバーと E2 のメンバーの間で選択する方法がないため、この診断を生成します。

dart
extension E1 on String {
  int get charCount => 1;
}

extension E2 on String {
  int get charCount => 2;
}

void f(String s) {
  print(s.charCount);
}

一般的な修正

#

両方の拡張機能が必要ない場合は、どちらかを削除または非表示にできます。

両方が必要な場合は、拡張機能オーバーライドを使用して、使用したいものを明示的に選択してください。

dart
extension E1 on String {
  int get charCount => length;
}

extension E2 on String {
  int get charCount => length;
}

void f(String s) {
  print(E2(s).charCount);
}