gpt4 book ai didi

Java 删除 -> 编译时类型对齐 - 或 Java 库/框架代码转换为应用程序逻辑

转载 作者:行者123 更新时间:2023-11-30 11:07:58 25 4
gpt4 key购买 nike

我正在处理一个复杂的分布式 OSGi 系统的配置场景。

我需要在 Java 7 上进行以下从库代码到应用程序代码的转换(以下代码不正确):

void someFrameworkMethod(...) {
....
// arg 2 is of type Object
// service is of type SimpleStrongTypedManagedService<?>
// arg 3 is of type Class<?>
updateSimple( service, entry.getValue(), desc.getClazz());
....
}

private <T> void updateSimple( SimpleStrongTypedManagedService<T> service,
T value,
Class<T> clazz) {
...
}

我可以访问 clazz有问题。是否有任何技巧可以让编译器“读懂我的想法”(我在上面尝试做的事情)或者我是否必须进行反射/MethodHandle 技巧?


我决定只存储 MethodHandle在我的库代码中而不是 Class<?>为了继续前进。不过仍然对解决方案感兴趣。

最佳答案

您遇到的问题是因为方法 updateSimple要求所有泛型类型为 T ,这意味着:任何但所有平等!

但是,您分别为泛型参数指定了不同的类型。 ? (任何),Object? (不必与之前的相同)。

所以你有两个选择

  1. 放弃所有通用参数都相同的要求。
  2. 转换你的参数,使它们都是 <Object>而不是 <?> .

通常转换是面向对象设计的不良代码味道,但对于第 3 方软件,您有时无法避免。 (在其他一些情况下,避免强制转换的 OO 复杂性是不值得的)。

如果你得到的参数确实是你需要的类型,那么就转换它们。否则调整您的方法签名,使其接受更广泛的参数。

关于Java 删除 -> 编译时类型对齐 - 或 Java 库/框架代码转换为应用程序逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28682349/

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