# 泛型的用法
**Question:**
```java=
class Foo<K,V>{
private K key;
private V value;
public Foo(K key,V value) {
this.key = key;
this.value = value;
}
public static <T> Foo<T,T> twice(T value){
return new Foo<T,T>(value,value);
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
}
```
## Which option fails?
A. Foo<String, Integer> mark = new Foo<String, Integer> ("Steve", 100);
B. Foo<String, String> pair = Foo.<String>twice ("Hello World!");
**C. Foo<Object, Object> percentage = new Foo<String, Integer>("Steve", 100);**
D. Foo<String, String> grade = new Foo <> ("John", "A");
- [x] **Answer: C**
:::info
- 選項A,雖然是正確的泛型使用方式,但是在Java 7以後的版本,在實體化物件的時候,最好是省略new運算子泛型的型態,變成以下這樣:
```Java=
Foo<String, Integer> mark = new Foo<> ("Steve", 100);
```
- 選項B,正確的泛型使用方式。
- 選項C,錯誤的泛型使用方式。應改成以下這樣:
```Java=
Foo<Object, Object> percentage = new Foo<>("Steve", 100);
```
- 選項D,正確的泛型使用方式。
:::
###### tags: `ocpjp`