跳到主要内容

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();
}