在jar中:
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>
答案 0 :(得分:1)
我已修好它:
metadata.xml中
<remove-node path="/api/package[@name='com.baidu.mapapi.cloud']/class[@name='CloudSearchResult']/field[@name='poiList']"/>
(项目)/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
{
}
}
答案 1 :(得分:0)
Java和C#中的泛型非常不同,因此没有泛型的IList实际上是正确的。这是由于Java端的类型擦除。
http://en.wikipedia.org/wiki/Generics_in_Java
在编译时检查泛型的类型正确性。通用的 然后在称为类型擦除的过程中删除类型信息。对于 例如,List将转换为非泛型类型List, 通常包含任意对象。编译时检查 保证生成的代码是类型正确的。
在类型擦除之后,无法确定类型参数 运行。例如,在运行时检查ArrayList时 不是一般的方法来确定在类型擦除之前它是否是一个 ArrayList或ArrayList。