week07 generics Flashcards
What purpose do Generics serve in Java?
Generics allow the creation of classes and methods that can operate on objects of different types, offering compile-time type safety. This minimizes runtime errors by ensuring type checks are done during compilation.
How do you specify a generic type in Java?
Generic types are specified using angle brackets and a placeholder type variable (e.g., ArrayList<T>
). This variable is replaced with an actual data type during the generic type invocation step.
Can Java Generics be used with primitive types?
No, Generics cannot be used with primitive types. Wrapper classes must be used instead for primitives (e.g., Integer
for int
).
Why must you specify the data type when using Generics?
Specifying the data type prevents the use of raw types, which bypass compile-time type checking. Always use Generics with specific data types to maintain type safety.
What are bounded type parameters in Generics?
Bounded type parameters restrict the data types that can be used with Generics. They can be limited to classes that extend a particular class or interface using the extends
keyword.
How do Generics relate to Java inheritance?
In Generics, inheritance doesn’t apply as expected. For example, Box<Integer>
is not a subclass of Box<Number>
. Generic types have their own hierarchy independent of the class hierarchy.
What are wildcards in Generics, and how are they used?
Wildcards (?
) represent unknown types in Generics. They can be unbounded, upper bounded (? extends Type
), or lower bounded (? super Type
), providing flexibility in accepting various types.
What are some limitations of using Generics in Java?
Generics cannot be used with primitive types, create instances of type parameters, declare static fields of type parameters, use casts or instanceof with parameterized types, or create arrays of parameterized types.
- プリミティブ型との使用: ジェネリクスは、intやdoubleなどのプリミティブ型には使用できません。代わりに、IntegerやDoubleのようなラッパークラスを使用する必要があります。
- 型パラメータのインスタンス化: new T()のように、型パラメータを使って新しいインスタンスを作成することはできません。ジェネリクスの型情報はコンパイル時に消去されるため、実行時に具体的な型が何であるかを知る方法がありません。
- 静的フィールドの型パラメータ: 型パラメータを使って静的フィールドを宣言することはできません。ジェネリッククラスの型パラメータはそのインスタンスごとに異なる可能性があるため、クラス全体で一貫した静的フィールドを持つことができません。
- 型パラメータのキャストとinstanceof: 型パラメータを使用したキャストやinstanceof演算子の使用は制限されています。これは型情報がコンパイル時に消去されるため、実行時に安全な型チェックを保証できないからです。
- パラメータ化された型の配列の作成: ジェネリクスを使用して配列を直接作成することはできません(例: new T[])。これは、ジェネリック型の配列が型安全性を維持できない可能性があるためです。
What does ‘Generic code is parameterized’ mean in Java?
When you write code using generics, you use placeholders(like T
, E
, K
, V
) for types instead of using actual data types(like int
, String
). This way, your code can work with any type of data, not just one. It makes your code flexible and safe.
What is generic type invocation step in Java?
It is a process where you specify the actual data type for the placeholder used in generic code. When you define a class, method, or interface using generics, you use placeholders to represent types that are not specified until the class or method is invoked.
e.g.
How is works:
1. ArrayList<T>
, T
is a placeholder for the type of elements in the list.
- when you want to create an instance of an
ArrayList
that holdString
objects, you write it asArrayList<String>
.String
is the actual data type that replace the placeholderT