了解使用 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::"和这些属性的顺序。我完全找不到任何关于这些事情的信息,以及如何理解它。问题是 - 班级签名应该是什么?感谢您的帮助!
我设法解决了这个问题(我自己,我很自豪:) )
签名应为:
public class Portfolio<C extends IConverter<Currency, Currency>> extends ArrayList<BoughtStock> implements Iterable<BoughtStock> {