1
Java.Lang.ObjectからXを取得しようとすると、AbstractMethodErrorが発生します。XamarinのJavaバインディングライブラリインターフェイスからのプロパティへのアクセス
class DataMessageHandler : Java.Lang.Object, IRouteManagerMessageHandler
{
public void Process(Message p0)
{
var message = p0;
var cartesian = Class.FromType(typeof(CartesianFloat));
var value = (ICartesian)message.GetData(cartesian);
var x = value.X();
}
}
ここで、CartesianFloatはICartesianの実装です。
ICartesian:
[global::Java.Interop.JavaTypeParameters (new string [] {"T extends java.lang.Number"})]
public partial interface ICartesian : IJavaObject {
// Metadata.xml XPath method reference: path="/api/package[@name='com.mbientlab.metawear.data']/interface[@name='Cartesian']/method[@name='x' and count(parameter)=0]"
[Register ("x", "()Ljava/lang/Number;", "GetXHandler:Com.Mbientlab.Metawear.Data.ICartesianInvoker, MetaWearAndroid")]
global::Java.Lang.Object X();
// Metadata.xml XPath method reference: path="/api/package[@name='com.mbientlab.metawear.data']/interface[@name='Cartesian']/method[@name='y' and count(parameter)=0]"
[Register ("y", "()Ljava/lang/Number;", "GetYHandler:Com.Mbientlab.Metawear.Data.ICartesianInvoker, MetaWearAndroid")]
global::Java.Lang.Object Y();
// Metadata.xml XPath method reference: path="/api/package[@name='com.mbientlab.metawear.data']/interface[@name='Cartesian']/method[@name='z' and count(parameter)=0]"
[Register ("z", "()Ljava/lang/Number;", "GetZHandler:Com.Mbientlab.Metawear.Data.ICartesianInvoker, MetaWearAndroid")]
global::Java.Lang.Object Z();
}
CartesianFloat:私はCartesianFloatとして値をキャストしようとした場合
public unsafe CartesianFloat()
: base (IntPtr.Zero, JniHandleOwnership.DoNotTransfer)
{
if (Handle != IntPtr.Zero)
return;
try {
if (GetType() != typeof (CartesianFloat)) {
SetHandle (
global::Android.Runtime.JNIEnv.StartCreateInstance (GetType(), "()V"),
JniHandleOwnership.TransferLocalRef);
global::Android.Runtime.JNIEnv.FinishCreateInstance (Handle, "()V");
return;
}
if (id_ctor == IntPtr.Zero)
id_ctor = JNIEnv.GetMethodID (class_ref, "<init>", "()V");
SetHandle (
global::Android.Runtime.JNIEnv.StartCreateInstance (class_ref, id_ctor),
JniHandleOwnership.TransferLocalRef);
JNIEnv.FinishCreateInstance (Handle, class_ref, id_ctor);
} finally {
}
}
// This method is explicitly implemented as a member of an instantiated Com.Mbientlab.Metawear.Data.ICartesian
global::Java.Lang.Object global::Com.Mbientlab.Metawear.Data.ICartesian.X()
{
return global::Java.Interop.JavaObjectExtensions.JavaCast<Java.Lang.Object>(((ICartesian) this).X());
}
// This method is explicitly implemented as a member of an instantiated Com.Mbientlab.Metawear.Data.ICartesian
global::Java.Lang.Object global::Com.Mbientlab.Metawear.Data.ICartesian.Y()
{
return global::Java.Interop.JavaObjectExtensions.JavaCast<Java.Lang.Object>(((ICartesian) this).Y());
}
// This method is explicitly implemented as a member of an instantiated Com.Mbientlab.Metawear.Data.ICartesian
global::Java.Lang.Object global::Com.Mbientlab.Metawear.Data.ICartesian.Z()
{
return global::Java.Interop.JavaObjectExtensions.JavaCast<Java.Lang.Object>(((ICartesian) this).Z());
}
}
、それは法のX()が値に存在しないと言います。値に時計を置く
は、{(-0.062、0.070、1.010)}
「message.GetData(デカルト)」とは何ですか? –
@ Sven-MichaelStübe、それはCartesianFloatオブジェクトです –
どういう意味ですか?メッセージとは何ですか?あなたのコードでは宣言されていません。 –