JAVA Generic
33534 ワード
이 포스팅은 자바의 신 1,2권의 내용으로 포스팅 되었습니다.
概要
타입체크
を提供する.実施方法
public classクラス名{...}
共通インタフェースインタフェース名{...}
Javaのすべてのクラスの最上位の親はObjectクラスであるため、任意のタイプのオブジェクトをwrapperTypeオブジェクトでデフォルトのデータ型にすることができます.
インプリメンテーション
public class ViewrainDefault {
private Object object;
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}
public class Main {
public static void main(String[] args) {
ViewrainDefault vd = new ViewrainDefault();
vd.setObject("제네릭");
String str = vd.getObject();
System.out.println(str);
}
}
以上の場合はMainです.Javaでコンパイルエラーが発生しました.すなわち,オブジェクトを特定のデータ型に明確化しなければならない.
ViewrainGeneric.java
public class ViewrainGeneric <T> {
private T t;
public T getObject() {
return t;
}
public void setObject(T t) {
this.t = t;
}
}
public class Main {
public static void main (String[] args) {
ViewrainGeneric<String> vg = new ViewrainGeneric<String>();
vg.setObject("제네릭");
String str = vg.getObject();
System.out.println(str);
}
}
強制タイプ変換は発生しません.n/a.理由
Genericがない場合は、データ型の新しいクラスまたはメソッドを作成する必要があります.
setObjectメソッドを呼び出すと仮定する場合は、データ型ごとにメソッドを実装する必要があります.うううううう
重複コードを節約し、コードの再利用性を高めるなどの利点があり、使いやすいです.
別の例
import java.io.Serializable;
public class CastingDTO {
private Object object;
public void setObject(Object object){
this.object = object;
}
public Object getObject(){
return object;
}
}
public class GenericSample {
public static void main(String[] ar){
GenericSample ex = new GenericSample();
ex.checkCastingDTO();
}
public void checkCastingDTO(){
CastingDTO dto1 = new CastingDTO();
dto1.setObject(new String());
CastingDTO dto2 = new CastingDTO();
dto2.setObject(new StringBuffer());
CastingDTO dto3 = new CastingDTO();
dto3.setObject(new StringBuilder());
{... 생략 }
String temp1 = (String)dto1.getObject();
StringBuffer temp2 = (StringBuffer)dto2.getObject();
StringBuilder temp3 = (StringBuilder)dto3.getObject();
}
public void checkDTO(CastingDTO dto){
Object tempObject = dto.getObject();
if(tempObject instanceof String){
System.out.println("String dto");
}else if(tempObject instanceof StringBuffer){
System.out.println("StringBuffer dto");
}else if(tempObject instanceof StringBuilder){
System.out.println("StringBuilder dto");
}
}
}
dto 1,2,3オブジェクトsetObject()を使用してオブジェクト値を設定する
しかし、temp 1,2,3はdto 1,2,3に代入された...この場合、オブジェクトオブジェクトはString、StringBuffer、StringBuilderであるため、Catingを行う必要があります.
また、dto 2がStringBufferなのかBuilderなのかが混同されたら、どうすればいいのでしょうか.毎回instanceofを使うわけにもいかない...この時、ジェニーン・リックはとても役に立ちました.
CastingGenericDTO.java
import java.io.Serializable;
public class CastingGenericDTO<T> implements Serializable {
private T object;
public void setObject(T obj){
this.object = obj;
}
public T getObject(){
return object;
}
}
宣言public class GenericSample2 {
public static void main(String[] ar){
GenericSample2 ex = new GenericSample2();
ex.checkGenericDTO();
}
public void checkGenericDTO(){
CastingGenericDTO<String> dto1 = new CastingGenericDTO<String>();
dto1.setObject(new String());
CastingGenericDTO<StringBuffer> dto2 = new CastingGenericDTO<StringBuffer>();
dto2.setObject(new StringBuffer());
CastingGenericDTO<StringBuilder> dto3 = new CastingGenericDTO<StringBuilder>();
dto3.setObject(new StringBuilder());
String temp1 = dto1.getObject();
StringBuffer temp2 = dto2.getObject();
StringBuilder temp3 = dto3.getObject();
}
}
ジェニーリックタイプの名前
K:鍵
N:数字(番号)
T:タイプ(Type)
V:値(Value)
S、U、V:第2、第3、第4のタイプ
ジェニーリックのWildCardタイプ
public void wildcardMethod(WildcardGeneric<?> c) {
Object value = c.getWildcard();
System.out.println(value);
}
制限付きWildCardタイプ
これは、
public void boundedWildcardMethod(WildcardGeneric <? extends Car> c) {
Car value = c.getWildcard();
System.out.println (value);
}
ジェニリック漢方法宣言
public class GenericWildcardSample {
public static void main(String[] ar){
GenericWildcardSample ex = new GenericWildcardSample();
ex.callGenericMethod();
}
public <T> void genericMethod(WildCardGeneric<T> c, T addValue){
c.setWildCard(addValue);
T value = c.getWildCard();
System.out.println(value);
// Teemo
}
public void callGenericMethod(){
WildCardGeneric<String> wildcard = new WildCardGeneric<String>();
genericMethod(wildcard, "Teemo");
}
}
https://onsil-thegreenhouse.github.io/programming/java/2018/02/17/java_tutorial_1-21/
https://limkydev.tistory.com/56
Reference
この問題について(JAVA Generic), 我々は、より多くの情報をここで見つけました https://velog.io/@viewrain/JAVA-Genericテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol