gpt4 book ai didi

java - Xamarin Android 绑定(bind)到继承通用类型的 Java 类型

转载 作者:行者123 更新时间:2023-12-01 16:52:49 25 4
gpt4 key购买 nike

我正在寻找解决以下问题的方法。给定 Java 中的类层次结构:

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中遇到过类似的问题

  • 您采用了哪些巧妙的解决方案来绑定(bind)此类层次结构?

我只对 Foo 上的 Value(绑定(bind)的 C# 类)的 getter 以及通过基本接口(interface)访问它的某种方式感兴趣(强制转换是可以的)。

最佳答案

生成器生成部分类。扩展这些可能是一个解决方案。您所要做的就是将文件添加到 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 - Xamarin Android 绑定(bind)到继承通用类型的 Java 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com