Xamarin Android 绑定到 Java 继承通用类型的类型
Xamarin Android Binding to Java Type which inherits Generic Type
我正在寻找以下问题的解决方法。给定 Java 中的 class 层次结构:
public interface Bar<T> {
getValue<T>();
}
public abstract class BarImpl<T> implements Bar<T> {
}
public class Foo extends BarImpl<Double> {
@override
public Double getValue() {
// ..
}
}
Xamarin.Android 生成包装器如下:
// Now in C# land
public interface Bar
{
// Xamarin.Android omits T Value { get; }
}
public partial abstract class BarImpl : Bar
{
// Xamarin.Android omits abstract T Value { get; }
}
public partial class Foo : BarImpl
{
// COMPILE ERROR HERE. No method to override
public override java.lang.Double Value
{
get { /* ... */ }
}
}
现在我很清楚 Java 编译删除了泛型信息,所以这实际上不是一个容易解决的问题,但我确实想知道是否:
谁在java.android
遇到过类似的问题
您使用了哪些巧妙的解决方案来绑定此 class 层次结构?
我只对 Foo 上的值 getter 感兴趣(绑定 c# class)以及通过基本接口访问它的一些方法(强制转换没问题)。
生成器生成部分 类。扩展这些可能是一个解决方案。您所要做的就是将文件添加到 Additions
文件夹并将您的内容添加到部分 类。我的想法是这样的:
// custom interface
public interface IMyBar<T> : Bar<T>
{
public T Value { get; }
}
// extend the partial base class
public partial abstract class BarImpl : IMyBar<Java.Lang.Double>
{
public abstract Java.Lang.Double Value { get; }
}
// compiler generates the rest
public partial class Foo
{
// COMPILE ERROR HERE. No method to override
public override Java.Lang.Double Value
{
get { /* ... */ }
}
}
我最终选择了另一条路线,围绕这些通用接口创建了我自己的 java 包装器,这样事情就可以毫无问题地绑定了。
因此,我没有使用从泛型继承的提供的接口,而是创建了我自己的接口,它没有继承并将它们传递给 java 方法来包装以前的方法。
我正在寻找以下问题的解决方法。给定 Java 中的 class 层次结构:
public interface Bar<T> {
getValue<T>();
}
public abstract class BarImpl<T> implements Bar<T> {
}
public class Foo extends BarImpl<Double> {
@override
public Double getValue() {
// ..
}
}
Xamarin.Android 生成包装器如下:
// Now in C# land
public interface Bar
{
// Xamarin.Android omits T Value { get; }
}
public partial abstract class BarImpl : Bar
{
// Xamarin.Android omits abstract T Value { get; }
}
public partial class Foo : BarImpl
{
// COMPILE ERROR HERE. No method to override
public override java.lang.Double Value
{
get { /* ... */ }
}
}
现在我很清楚 Java 编译删除了泛型信息,所以这实际上不是一个容易解决的问题,但我确实想知道是否:
谁在java.android
遇到过类似的问题
您使用了哪些巧妙的解决方案来绑定此 class 层次结构?
我只对 Foo 上的值 getter 感兴趣(绑定 c# class)以及通过基本接口访问它的一些方法(强制转换没问题)。
生成器生成部分 类。扩展这些可能是一个解决方案。您所要做的就是将文件添加到 Additions
文件夹并将您的内容添加到部分 类。我的想法是这样的:
// custom interface
public interface IMyBar<T> : Bar<T>
{
public T Value { get; }
}
// extend the partial base class
public partial abstract class BarImpl : IMyBar<Java.Lang.Double>
{
public abstract Java.Lang.Double Value { get; }
}
// compiler generates the rest
public partial class Foo
{
// COMPILE ERROR HERE. No method to override
public override Java.Lang.Double Value
{
get { /* ... */ }
}
}
我最终选择了另一条路线,围绕这些通用接口创建了我自己的 java 包装器,这样事情就可以毫无问题地绑定了。 因此,我没有使用从泛型继承的提供的接口,而是创建了我自己的接口,它没有继承并将它们传递给 java 方法来包装以前的方法。