gpt4 book ai didi

Java 支持泛型类型和方法。为什么不是通用字段?

转载 作者:行者123 更新时间:2023-11-30 03:48:31 26 4
gpt4 key购买 nike

尽管 Java 没有泛型 [@runtime],但最近我还是陷入了某种泛型 hell 。

情况(删除了简化且无用的上下文):

有一个库A,它提供了一个接口(interface)IA。有一个库B,它提供了接口(interface)IB。这两个库都是第三方库,我完全无法控制。(实际上,有两个以上,但我们不要让它变得太复杂。)

有一个由我公司开发的引擎,它定义并大量使用同时实现 IA 和 IB 的对象。因为我们的引擎必须处理所有实现,所以我们不能简单地定义一些 interface IAB implements IA, IB并让我们所有的类(class)去实现。因此,为了实现编译时类型安全和方法公开,决定使用泛型方法。因此,每当需要“IAB”时,我们都会 <IAB extends IA & IB> void doThis(IAB someObjectWithBothAPIs) .

事实上,这非常有效。然而,不可能做像 <IAB extends IA & IB> IAB fieldWithBothAPIs; 这样简单的事情。 (都不是 IA & IB fieldWithBothAPIs; )。这给我们带来了一个问题:

为什么不呢?

基本上,允许任意 TypeParams(opt) 的(设计级别?)原因是什么? ,而实例字段仅限于具体的 Type

JLS §8.3

FieldDeclaration:
FieldModifiers(opt) Type VariableDeclarators ;

JLS §8.4

MethodDeclaration:
MethodHeader MethodBody

MethodHeader:
MethodModifiers(opt) TypeParameters(opt) Result MethodDeclarator Throws(opt)

最佳答案

泛型方法在运行时从其调用上下文接收其类型参数。它可以在不同的情况下接收不同的类型。

泛型字段如何接收类型参数?该字段不能根据其在某些上下文中的使用而具有不同的类型。它必须具有在编译时已知的单一类型。

关于Java 支持泛型类型和方法。为什么不是通用字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983603/

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