Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin:没有getXXX()/setXXX()的公共字段在绑定jar库时丢失其泛型_Jar_Xamarin - Fatal编程技术网

Xamarin:没有getXXX()/setXXX()的公共字段在绑定jar库时丢失其泛型

Xamarin:没有getXXX()/setXXX()的公共字段在绑定jar库时丢失其泛型,jar,xamarin,Jar,Xamarin,罐内: public List<CloudPoiInfo> poiList; Java和C#中的泛型非常不同,因此没有泛型的IList实际上是正确的。这是由于Java端的类型擦除 泛型在编译时检查类型正确性。泛型 然后,在一个称为类型擦除的过程中删除类型信息。对于 例如,列表将转换为非泛型类型列表, 它通常包含任意对象。编译时检查 保证生成的代码类型正确 由于类型擦除,无法在以下位置确定类型参数: 运行时。例如,在运行时检查ArrayList时 在类型擦除之前,没有通用的方法来确

罐内:

public List<CloudPoiInfo> poiList;
Java和C#中的泛型非常不同,因此没有泛型的IList实际上是正确的。这是由于Java端的类型擦除

泛型在编译时检查类型正确性。泛型 然后,在一个称为类型擦除的过程中删除类型信息。对于 例如,列表将转换为非泛型类型列表, 它通常包含任意对象。编译时检查 保证生成的代码类型正确

由于类型擦除,无法在以下位置确定类型参数: 运行时。例如,在运行时检查ArrayList时 在类型擦除之前,没有通用的方法来确定它是否是 ArrayList或ArrayList

我已经修好了:

Metadata.xml

<remove-node path="/api/package[@name='com.baidu.mapapi.cloud']/class[@name='CloudSearchResult']/field[@name='poiList']"/>

{project}/Additions/CloudSearchResult.cs

using Android.Runtime;
using System;
using System.Collections;
using System.Collections.Generic;

namespace Com.Baidu.Mapapi.Cloud
{
    public partial class CloudSearchResult : BaseSearchResult
    {
    static IntPtr poiList_jfieldId;

    // Metadata.xml XPath field reference: path="/api/package[@name='com.baidu.mapapi.cloud']/class[@name='CloudSearchResult']/field[@name='poiList']"
    [Register("poiList")]
    public global::System.Collections.Generic.IList<CloudPoiInfo> PoiListX
    {
        get
        {
        if (poiList_jfieldId == IntPtr.Zero)
            poiList_jfieldId = JNIEnv.GetFieldID(class_ref_2, "poiList", "Ljava/util/List;");
        IntPtr __ret = JNIEnv.GetObjectField(Handle, poiList_jfieldId);
        return global::Android.Runtime.JavaList<CloudPoiInfo>.FromJniHandle(__ret, JniHandleOwnership.TransferLocalRef);
        }
        set
        {
        if (poiList_jfieldId == IntPtr.Zero)
            poiList_jfieldId = JNIEnv.GetFieldID(class_ref_2, "poiList", "Ljava/util/List;");
        IntPtr native_value = global::Android.Runtime.JavaList<CloudPoiInfo>.ToLocalJniHandle(value);
        JNIEnv.SetField(Handle, poiList_jfieldId, native_value);
        JNIEnv.DeleteLocalRef(native_value);
        }
    }

    internal static new IntPtr java_class_handle_2;
    internal static new IntPtr class_ref_2
    {
        get
        {
        return JNIEnv.FindClass("com/baidu/mapapi/cloud/CloudSearchResult", ref java_class_handle_2);
        }
    }
    }

    public abstract partial class BaseSearchResult : Java.Lang.Object
    {
    }

    public partial class CloudPoiInfo : Java.Lang.Object
    {
    }
}
使用Android.Runtime;
使用制度;
使用系统集合;
使用System.Collections.Generic;
命名空间Com.Baidu.Mapapi.Cloud
{
公共部分类CloudSearchResult:BaseSearchResult
{
静态IntPtr poiList_jfieldId;
//Metadata.xml XPath字段引用:path=“/api/package[@name='com.baidu.mapapi.cloud']/class[@name='CloudSearchResult']/field[@name='poiList']”
[注册(“poiList”)]
公共全局::System.Collections.Generic.IList PoiListX
{
得到
{
if(poiList_jfieldId==IntPtr.Zero)
poiList_jfieldId=JNIEnv.GetFieldID(类_ref_2,“poiList”,“Ljava/util/List;”);
IntPtr\uuu ret=JNIEnv.GetObjectField(句柄,poiList\ujFieldId);
返回global::Android.Runtime.JavaList.FromJniHandle(uu ret,JniHandleOwnership.TransferLocalRef);
}
设置
{
if(poiList_jfieldId==IntPtr.Zero)
poiList_jfieldId=JNIEnv.GetFieldID(类_ref_2,“poiList”,“Ljava/util/List;”);
IntPtr native_value=global::Android.Runtime.JavaList.ToLocalJniHandle(value);
SetField(句柄、poiList\u jfieldId、本机值);
JNIEnv.DeleteLocalRef(本机值);
}
}
内部静态新IntPtr java_类_句柄_2;
内部静态新IntPtr类\u参考\u 2
{
得到
{
返回JNIEnv.FindClass(“com/baidu/mapapi/cloud/CloudSearchResult”,参考java\u class\u handle\u 2);
}
}
}
公共抽象部分类BaseSearchResult:Java.Lang.Object
{
}
公共部分类CloudPoiInfo:Java.Lang.Object
{
}
}

Thx,但我需要这个通用的。这个jar是第三方的,它是经过编程的。。我能解决这个问题吗?你有什么样的通用用例?从代码中使用?你就不能在它周围创建一个包装器,并将其转换为IList吗?我尝试使用(IList)poiList进行转换,然后vs调用了未捕获的ClassCastException..我删除了项目中的dir'bin'并构建了项目(未重新构建),代码运行良好。。
using Android.Runtime;
using System;
using System.Collections;
using System.Collections.Generic;

namespace Com.Baidu.Mapapi.Cloud
{
    public partial class CloudSearchResult : BaseSearchResult
    {
    static IntPtr poiList_jfieldId;

    // Metadata.xml XPath field reference: path="/api/package[@name='com.baidu.mapapi.cloud']/class[@name='CloudSearchResult']/field[@name='poiList']"
    [Register("poiList")]
    public global::System.Collections.Generic.IList<CloudPoiInfo> PoiListX
    {
        get
        {
        if (poiList_jfieldId == IntPtr.Zero)
            poiList_jfieldId = JNIEnv.GetFieldID(class_ref_2, "poiList", "Ljava/util/List;");
        IntPtr __ret = JNIEnv.GetObjectField(Handle, poiList_jfieldId);
        return global::Android.Runtime.JavaList<CloudPoiInfo>.FromJniHandle(__ret, JniHandleOwnership.TransferLocalRef);
        }
        set
        {
        if (poiList_jfieldId == IntPtr.Zero)
            poiList_jfieldId = JNIEnv.GetFieldID(class_ref_2, "poiList", "Ljava/util/List;");
        IntPtr native_value = global::Android.Runtime.JavaList<CloudPoiInfo>.ToLocalJniHandle(value);
        JNIEnv.SetField(Handle, poiList_jfieldId, native_value);
        JNIEnv.DeleteLocalRef(native_value);
        }
    }

    internal static new IntPtr java_class_handle_2;
    internal static new IntPtr class_ref_2
    {
        get
        {
        return JNIEnv.FindClass("com/baidu/mapapi/cloud/CloudSearchResult", ref java_class_handle_2);
        }
    }
    }

    public abstract partial class BaseSearchResult : Java.Lang.Object
    {
    }

    public partial class CloudPoiInfo : Java.Lang.Object
    {
    }
}