Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java新手:两者之间的区别<&燃气轮机;和()?_Java_Class - Fatal编程技术网

Java新手:两者之间的区别<&燃气轮机;和()?

Java新手:两者之间的区别<&燃气轮机;和()?,java,class,Java,Class,我正在学习Java,有一个关于和()之间的区别的问题,比如定义类的时候?例如: public class CounterMap<K, V> implements java.io.Serializable { private static final long serialVersionUID = 11111; MapFactory<V, Double> mf; Map<K, Counter<V>> counterMap;

我正在学习Java,有一个关于和()之间的区别的问题,比如定义类的时候?例如:

public class CounterMap<K, V> implements java.io.Serializable {
   private static final long serialVersionUID = 11111;

   MapFactory<V, Double> mf;
   Map<K, Counter<V>> counterMap;

   protected Counter<V> ensureCounter(K key) {
       Counter<V> valueCounter = counterMap.get(key);
       if (valueCounter == null) {
           valueCounter = new Counter<V>(mf);
           counterMap.put(key, valueCounter);
       }
       return valueCounter;
   }
}
公共类计数器映射实现java.io.Serializable{
私有静态最终长serialVersionUID=11111;
mapmf;
地图计数器地图;
受保护计数器(K键){
计数器值计数器=计数器映射.get(键);
if(valueCounter==null){
valueCounter=新计数器(mf);
计数器映射。put(键、值计数器);
}
返回值计数器;
}
}

如有任何见解,将不胜感激。谢谢。

尖括号
用于表示通用类型。例如,包含字符串的列表类型为
list
。泛型是一个中间主题,如果您是初学者,在不了解其他Java和编程基础知识的情况下,它可能会有点混乱

括号
()
用于调用和声明方法,其中包含方法参数和参数

您的示例是使用泛型在映射中存储任何类型的数据,而不必具体说明数据的类型。因此,如果我想要一个
计数器映射
,它存储
Long
String
类型的键值对,我可以这样声明和初始化它:

CounterMap myCounterMap=new CounterMap()

从Java 7开始,您可以使用称为“钻石”的东西,并将其简化为:

CounterMap myCounterMap=new CounterMap()

有些关联

参数、变量、参数--

类型参数、类型变量、类型参数--

f()//键入参数`N`和绑定的`Number`
{
//这里,`N`是一个类型变量。
}
f();//使用类型参数'Integer'实例化,该参数为'Number'`

在这些条件下,

和()永远不能互换,真的吗?始终适用于泛型类型;()总是用于方法参数。正如您将在下面看到的,是用于所谓的“泛型”的。您可能希望暂时忽略它们以及它们内部的内容,并将重点放在()上,这一点更为重要。唯一不同的是,我认为,当您运行javac时,您将看到一个警告;以后再学仿制药。谢谢你,本!这很有帮助。
void f(Number n)  // define a parameter `n` of type `Number`
{
    // here, `n` is a variable. (JLS jargon: "parameter variable")
}

f(x);        // invoke with argument `x`, which must be a `Number`
<N extends Number> f()   // type-parameter `N` with bound `Number`
{
    // here, `N` is a type-variable.
}

<Integer>f();      //  instantiate with type-argument `Integer`, which is a `Number`