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
{
}
}