gpt4 book ai didi

java - gemfire 教程中的泛型用法

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:10 26 4
gpt4 key购买 nike

在此gemfire tutorial

我无法解释这个通用声明:

people = cache.<String, Profile>createRegionFactory(REPLICATE)
.addCacheListener(listener)
.create("people");

在此代码片段中使用泛型的方式有何意义?

最佳答案

<String, Profile> cache.之后是一个显式类型参数。当编译器无法正确推断类型参数时,通常会使用显式类型参数,在这种情况下,您可以显式告诉编译器将类型参数推断为您在方法名称之前的尖括号中传递的类型参数。

例如,假设您有一个方法:

public <T> void someMethod(T param1, T param2) {
// body
}

现在,如果您调用此方法:

obj.someMethod(12, "abc");

那么您会期望调用会给出编译器错误,因为您将不同的类型传递给相同的类型参数。但事实并非如此。事实上,类型 T推断为:

T: Object & Serializable & Comparable<? extends Object&Serializable&Comparable<?>>

但是,您可能希望编译器将类型参数推断为 Object 。那么,你会怎么做呢?您需要一个显式类型参数:

obj.<Object>someMethod(12, "abc");

.. 现在输入 T将被推断为 Object .

<小时/>

所以,就你的情况而言,我猜 createRegionFactory(REPLICATE)方法将返回带有意外类型参数的参数化类型,例如 - SomeType<Object, Object> ,因为编译器无法推断类型参数,可能是因为没有足够的上下文。但您想要进一步的方法链 - addCacheListener(listener)要在具有类型参数 <String, Profile> 的参数化类型上调用。

因此,要显式告诉编译器返回具有特定类型参数的参数化类型,您可以通过方法调用显式地给出它们:

cache.<String, Profile>createRegionFactory(REPLICATE)
.addCacheListener(listener)...

现在,addCacheListener(listener)将在 SomeType<String, Profile> 上调用而不是SomeType<Object, Object>

<小时/>

引用文献:

关于java - gemfire 教程中的泛型用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19457119/

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