gpt4 book ai didi

java - 通用声明混淆

转载 作者:行者123 更新时间:2023-11-29 05:26:15 24 4
gpt4 key购买 nike

我正在阅读 Brain Goetz 的一篇文章。我对以下代码的工厂方法有疑问。

public class BoxImpl<T> implements Box<T> {

public static<V> Box<V> make() {
return new BoxImpl<V>();
}

作者写这个是为了减少重新声明类型参数的冗余

Box<String> box=new Box<String>();

于是,他像上面那样使用了工厂方法。

Box<String> myBox = BoxImpl.make();

但我的疑问是为什么 <V>Box 的 make 方法中类,为什么我们不能像下面这样使用:

public class BoxImpl<T> implements Box<T> {

public static<T> Box<T> make() {
return new BoxImpl<T>();
}

以上两者有什么区别?

最佳答案

在 Java 7 中引入菱形运算符 <> 之前,这种技术(除其他外,由 Guava 集合使用)非常有用,可以避免非常嘈杂的代码,例如:

// Java 5:
Box<Map<String, List<Integer>> box = new BoxImpl<Map<String, List<Integer>>();
// with static inference
Box<Map<String, List<Integer>> box = BoxImpl.make();
// with diamond operator - Java7
Box<Map<String, List<Integer>> box = new BoxImpl<>();

至于为什么在make方法中声明一个新的类型参数V,是因为它是静态的,静态方法不能访问类型参数,因为它们超出范围,属于特定的类型的实例化(类似于实例变量,不能在静态方法中使用)

关于java - 通用声明混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22579810/

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