首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xamarin Android绑定到继承泛型类型的Java类型

Xamarin Android绑定到继承泛型类型的Java类型
EN

Stack Overflow用户
提问于 2016-04-10 17:44:54
回答 2查看 1.8K关注 0票数 0

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

代码语言:javascript
运行
复制
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生成包装器如下:

代码语言:javascript
运行
复制
// 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中,任何人都遇到过类似的问题
  • 您使用了什么聪明的解决方案来绑定这个类层次结构?

我只对Foo (绑定c#类)上的值获取和通过基本接口访问它的一些方法感兴趣(cast是可以的)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-10 18:13:03

生成器生成部分类。扩大这些范围可能是一个解决办法。您所要做的就是将文件添加到Additions文件夹中,并将您的内容添加到部分类。我的想法应该是:

代码语言:javascript
运行
复制
// 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 { /* ... */ }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2019-06-13 00:49:26

最后,我选择了另一条路线,并围绕这些通用接口创建了自己的java包装器,这样就不会出现问题。因此,我没有使用从泛型继承的提供的接口,而是创建了自己的接口,没有继承这些接口,并将它们传递给包装了前面的方法的java方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36533263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档