了解使用 C# 交叉编译中的通用 Java 类签名

本文关键字:Java 交叉编译 了解 | 更新日期: 2023-09-27 18:34:22

我必须在Java中实现一些类,这些类将通过用C#编写的测试(使用Visual Studio单元测试)。我在这部分测试中遇到了问题:

var portfolioSignatureAttribute = dllType
    .GetCustomAttributes(typeof(SignatureAttribute), false)
    .Cast<SignatureAttribute>()
    .FirstOrDefault();
Assert.AreEqual("<C::LIConverter<LCurrency;LCurrency;>;>Ljava/util/ArrayList<LBoughtStock;>;Ljava/lang/Iterable<LBoughtStock;>;", portfolioSignatureAttribute.Signature, iterableMessage);

我尝试写的签名是,但不起作用是:

public class Portfolio extends ArrayList<BoughtStock> implements IConverter<Currency, Currency>, Iterable<BoughtStock>

另外,我收到了这个断言抛出的一些消息:

键入投资组合不正确的签名。请记住添加通用接口java.lang.Iterable实现。请记住为泛型参数指定名称 C。还要记住从java.util.ArrayList继承你的类。

这里也是测试输出的片段:

Result Message: Assert.AreEqual failed. 
Expected:<<C::LIConverter<LCurrency;LCurrency;>;>Ljava/util/ArrayList<LBoughtStock;>;Ljava/lang/Iterable<LBoughtStock;>;>. 
Actual:<Ljava/util/ArrayList<LBoughtStock;>;LIConverter<LCurrency;LCurrency;>;Ljava/lang/Iterable<LBoughtStock;>;>. 

所以一般来说,存在以下问题:缺少"C::"和这些属性的顺序。我完全找不到任何关于这些事情的信息,以及如何理解它。问题是 - 班级签名应该是什么?感谢您的帮助!

了解使用 C# 交叉编译中的通用 Java 类签名

我设法解决了这个问题(我自己,我很自豪:) )

签名应为:

public class Portfolio<C extends IConverter<Currency, Currency>> extends ArrayList<BoughtStock> implements Iterable<BoughtStock> {