【问题标题】:Is there a Dart function to check if an object has a particular attribute or method?是否有 Dart 函数来检查对象是否具有特定的属性或方法?
【发布时间】:2020-06-06 05:39:16
【问题描述】:

问题:

i) 检查 Dart 中的普通 Class 对象是否具有特定属性时?

ii) 从 api 解码 JSON 响应正文时,如何检查对象是否在 DART 中具有特定属性?

例如在 Javascript 中,有“hasOwnProperty

if (obj.hasOwnProperty('property')) {
    // do something
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以使用bool containsKey(Object key);。结帐documentation 了解更多信息。您还可以在这里找到相关的post

    if (obj.containsKey('property')) {
        // do something
    }
    

    【讨论】:

    • 非常感谢。是的,这在解码 json 响应时非常有用。但我也指 Dart 中的普通 Class 对象。在python中,我认为我们有 hasattr()
    • 是的,但是由于您询问 JSON 响应正文,我没有考虑 PODO
    • 但这很有帮助。谢谢 !!我想我应该稍微纠正一下我的问题
    【解决方案2】:

    Dart 是强类型的;在调用方法之前,您应该检查 Object 是否属于您想要的类型:

    if (obj is ClassWithProperty) {
      print(obj.property);
    }
    

    推荐它,但您可以使用dynamic 类型禁用类型检查:

    var hasProperty = false;
    try {
      (obj as dynamic).property;
      hasProperty = true;
    } on NoSuchMethodError {
    }
    

    但是catching Error types is frowned upon.

    【讨论】:

    • 如何检查对象是否为映射(不管其键/值的类型,即 )? is 运算符似乎返回带有 的类型,这使其成为不同的类型。
    • @MuhammadQasim 您可以通过object is Mapobject is Map<dynamic, dynamic> 的简写)检查对象是否为Map
    • 我的错。刚刚意识到我在比较 runtimeType 而不是对象本身,它给出了这样的错误:var obj = {"abc": 123}; if(obj.runtimeType is Map) 感谢您的帮助。
    猜你喜欢
    • 2017-10-09
    • 2021-03-12
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多