当前位置:  开发笔记 > 编程语言 > 正文

如何将java泛型转换为Delphi

如何解决《如何将java泛型转换为Delphi》经验,为你挑选了1个好方法。



1> Rob Kennedy..:

Java代码利用参数类型中的协方差和逆变.参数to应该是一个带有一个参数的函数.参数的类型可以是T 或任何超类型T.该函数应返回type U 或任何子类型的值U.

to函数将调用mapping并传递它T当前保存的类型的值(如果它根本保存任何值),因此参数类型mapping需要是T可以分配给它的东西.这包括T,Object以及层次结构中它们之间的任何其他类型.

同样,to将使用结果mapping获取类型的值U.Mapping不必声明为U具体返回,但它返回的任何类型都需要赋值U.

在Delphi中无法表达这些约束.你能做的最好是请求使用字面函数类型TU:

function &to(mapping: TFunc): Maybe;

可以U通过引入另一个类型参数来表达约束:

function &to(mapping: TFunc): Maybe;

我不知道类型参数是否可以用作同一参数列表中其他参数的约束.我也不确定编译器是否可以推断出该V上下文中的值,因此调用to会很麻烦.

另一方面,如果虚方法不能有新的通用参数(如U),那么约束根本不重要,因为你不能声明方法开始.

然而,根据参考实现,仅存在两个的具体实现Maybe,所以一种可能性可能是实现to作为非虚拟函数,然后只手动检查运行时类型.它不会很漂亮.像这样的东西:

if Self is TUnknown then
  Result := unknown
else
  Result := definitely(mapping(TDefiniteValue(Self).value));


@Johan虽然为Rob大肆宣传.他白天是C++大师,但仍然记得Delphi.我认为他是Stack上最好的常规德尔福回答者,FWIW.他的答案总是写得很漂亮,总是充满洞察力.他几乎没有犯过错误,不像我能想到的其他人..... ;-)
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有