在罐子里:
public List<CloudPoiInfo> poiList;
但是Xamarin以System.Collections.IList poiList
的形式生成了代码,System.Collections.Generic.IList<Com.Baidu.Mapapi.Cloud.CloudPoiInfo> myClassList
是对的。
我试过了
<attr path="/api/package[@name='com.baidu.mapapi.cloud']/class/field[@type-generic-aware='java.util.List<com.baidu.mapapi.cloud.CloudPoiInfo>']" name="type">System.Collections.Generic.IList<Com.Baidu.Mapapi.Cloud.CloudPoiInfo></attr>
发布于 2014-05-22 17:49:51
我已经修好了:
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
{
}
}
发布于 2014-05-22 04:31:18
Java和C#中的泛型非常不同,因此没有泛型的IList实际上是正确的。这是由于Java端的类型擦除造成的。
泛型在编译时检查类型正确性.然后,在称为类型擦除的过程中删除泛型类型信息。例如,列表将转换为非泛型类型列表,该列表通常包含任意对象.编译时检查确保生成的代码类型正确. 由于类型擦除,无法在运行时确定类型参数.例如,在运行时检查ArrayList时,无法确定在类型擦除之前它是ArrayList还是ArrayList。
https://stackoverflow.com/questions/23797436
复制相似问题