मैंने एक डार्ट विधि लिखी है जो एक सामान्य प्रकार टी लेती है और फिर एक गतिशील प्रकार को टी में डालने का प्रयास करती है। (संपादित करें: मैंने तब से समीकरण से जेनेरिक हटा दिए हैं, और गतिशील से स्ट्रिंग तक कास्ट अभी भी उसी त्रुटि के साथ विफल हो रहा है। )

इस विशिष्ट परिदृश्य में, मैं एक स्ट्रिंग को टी के रूप में पास कर रहा हूं।

निम्न पंक्ति त्रुटि फेंकता है

 T result = value.cast<T>();

पूरा कोड इस प्रकार है...

class JsonObject{
    final Map<String, dynamic> _map;
    JsonObject(this._map);

    T getValue<T>(String key) {
        dynamic value = _map[key];
        if (value == null)
            throw new JsonParseException._("JsonMap: can not find value with key = "+key);
        T result = value.cast<T>();
        if (result == null)
            throw new JsonParseException._("JsonMap: value with key = "+key+" is not of requested type "+T.toString());
        return result;
    }

    String getString(String key) => getValue<String>(key);
}

मुझे जो त्रुटि मिल रही है वह इस प्रकार है। मैंने अपने एप्लिकेशन कोड में पहली कॉल के बाद स्टैक ट्रेस को ट्रिम कर दिया है।

06-25 09:34:04.883 I/स्पंदन (7755): क्लास 'स्ट्रिंग' का कोई उदाहरण नहीं है विधि 'कास्ट'। 06-25 09:34:04.883 मैं/स्पंदन (7755): रिसीवर: "foo1" ०६-२५ ०९:३४:०४.८८३ मैं/स्पंदन (७७५५): कॉल करने की कोशिश की: कास्ट () 06-25 09:34:04.920 मैं/स्पंदन (7755): जब अपवाद फेंका गया था, यह स्टैक था: 06-25 09:34:05.004 मैं/स्पंदन (7755): #0
Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5) 06-25 09:34:05.011 मैं/स्पंदन (7755): #1 JsonObject.getValue (पैकेज: my_app/Util/json_parser.dart:62:26)

1
ScottF 25 जून 2019, 21:24

1 उत्तर

सबसे बढ़िया उत्तर

cast Lists और Iterables पर एक विधि है, सामान्य प्रकारों पर नहीं। आप as ढूंढ रहे हैं।

T result = value.cast<T>(); को T result = value as T; से बदलें। यदि value T नहीं है तो यह फेंक देगा। या तो उसके साथ जियो, या उसे पकड़ो और अपना JsonParseException फेंक दो।

1
Richard Heap 26 जून 2019, 01:22