gpt4 book ai didi

java - 谷歌 Guice + 泛型 : Is there some magic behind the curtains?

转载 作者:搜寻专家 更新时间:2023-11-01 01:18:26 24 4
gpt4 key购买 nike

在我看来,Guice 实现在处理泛型时做了一些非常棘手的事情。看起来它在运行时就知道在编译时使用的泛型类型。让我们看一个简单的例子:

@Inject
public void Bar(Provider<Foo> genericInjector){
...

在运行时,Guice 将在此处注入(inject) Provider 的正确实现(即提供 Foo 实例的实现)。但据我所知,泛型类型在运行时被删除(参见:Type Erasure)。所以 Guice 在运行时真正看到的是:

@Inject
public void Bar(Provider genericInjector){
....

那么 Guice 怎么可能知道要注入(inject) Provider 的哪个实现呢?

最佳答案

不,类型删除不会删除一切。您仍然可以获得字段类型、参数等。 Provider<Foo>信息在执行时仍然存在。参见 Method.getGenericParameterTypes 例如。

没有保留的是有关特定对象的类型信息。例如,如果我写:

List<String> list = new ArrayList<String>();
showType(list);

...


public static void showType(List<?> list)
{
// ???
}

无法确定它是 ArrayList<String>因为该对象不再具有该信息。

参见 Java Generics FAQ获取更多信息。

关于java - 谷歌 Guice + 泛型 : Is there some magic behind the curtains?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8273462/

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