为什么用@required注释变量时需要默认值?

时间:2020-08-16 16:21:47

标签: dart

class Program
{
    private static string logfile = @"c:\temp\log.txt";
    public static void Main(string[] args)
    {
        File.WriteAllText(logfile, "Start\n");
        SomeClass some = new SomeClass("Hello World!");
        some = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();
        File.AppendAllText(logfile, "Done\n");
    }
}

class SomeClass 
{
    private static string logfile = @"c:\temp\log.txt";
    public string SomeString { get; set; }
    public SomeClass(string s) { SomeString = s; }
    ~SomeClass()
    {
        File.AppendAllText(logfile, "Finalize\n");
    }
}

错误:

由于其类型,参数“ bar”的值不能为“ null”,并且不提供非null的默认值。

我正在用void main() { foo(bar: 1); } void foo({@required int bar}) {} // Error 注释bar,并且它也是不可为空的。这意味着我将总是必须提供@required一个非空值。那么,为什么编译器要求我提供默认值?

1 个答案:

答案 0 :(得分:1)

@required是来自meta包的旧注释标记,被引入作为从分析仪发出警告的一种方式。使用NNBD,已将其更改为名为required的关键字。您可以在以下链接中了解有关此关键字的更多信息:

https://dart.dev/null-safety/understanding-null-safety#required-named-parameters