我有这个密码.该类是泛型的,当我通过传递String Type来实例化它时.该变量将变为字符串类型.然而,这份声明

if(_val is String){
}

这似乎不是真的.知道为什么吗?

以下是完整代码:

    class foo<T>{
    T _val;
    QVar()
    {
         //Read the value from preferences
         if(_val is String){
            ... //Does not come in here!!
         }
    }
  }

 a   = new foo<String>();

推荐答案

而不是

if(T is String)

应该是这样的

if(_val is String)

is运算符在运行时用作类型保护,它对标识符(变量)进行操作.在这些情况下,编译器在很大程度上会告诉您一些关于T refers to a type but is being used as a value的内容.

注意,因为您有一个类型保护(即if(_val is String)),编译器已经知道_val的类型在您的if-挡路中只能是String.

如果你需要显式施法,你可以看看Dart中的as操作符,https://www.dartlang.org/guides/language/language-tour#type-test-operators.

Dart相关问答推荐

如何使用 http 库捕获 SocketException?

自定义主题无法正常工作

如何在 Flutter 中向 AnimationController 添加 Curves 类动画?

AppLifcycleState.didChangeLifecycleState( ) 函数在应用程序进入前台或后台时不被调用

如何用 Flutter 在同屏路由上制作英雄风格的动画?

自定义声音推送通知不起作用

无法将小部件标记为需要构建,因为框架已经在构建小部件的过程中

Flutter 从asset文件夹中读取所有文件

如何判断两张 map 的省道是否相等

从real mobile浏览器访问Flatter localhost

Flitter中的谷歌 map 没有出现

使用元组解包样式交换两个变量的值

Dart 有 int.INFINITY 吗?

用 Dart 模式替换静态继承

如何从 JavaScript 调用 Dart 函数

如何在dart中获得一周的开始或结束

Dart MD5 字符串

在 Dart 中为数字添加前导零

Dart:创建一个从 0 到 N 的列表

如何使用 Dart 将字符串解析为数字?