跳到主要內容

abi_specific_integer_invalid

擴充套件“AbiSpecificInteger”的類必須只有一個 const 建構函式,不能有其他成員,也不能有型別引數。

描述

#

當擴充套件 AbiSpecificInteger 的類不滿足以下所有要求時,分析器會生成此診斷訊息

  • 必須只有一個建構函式
  • 建構函式必須標記為 const
  • 除了這一個建構函式之外,不能有任何其他成員
  • 不能有任何型別引數

示例

#

以下程式碼會生成此診斷訊息,因為類 C 未定義 const 建構函式

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
}

以下程式碼會生成此診斷訊息,因為建構函式不是 const 建構函式

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
  C();
}

以下程式碼會生成此診斷訊息,因為類 C 定義了多個建構函式

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
  const C.zero();
  const C.one();
}

以下程式碼會生成此診斷訊息,因為類 C 定義了欄位

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
  final int i;

  const C(this.i);
}

以下程式碼會生成此診斷訊息,因為類 C 具有型別引數

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C<T> extends AbiSpecificInteger { // type parameters
  const C();
}

常見修復方法

#

修改類,使其滿足沒有型別引數和只有一個成員(即 const 建構函式)的要求

dart
import 'dart:ffi';

@AbiSpecificIntegerMapping({Abi.macosX64 : Int8()})
final class C extends AbiSpecificInteger {
  const C();
}