0.はじめに
1.一般的な最も簡単な
package io.ilss.advanced.generic;
public class MyObject<T> extends BaseData {
private T valueOne;
private T valueTwo;
public MyObject(T valueOne, T valueTwo) {
this.valueOne = valueOne;
this.valueTwo = valueTwo;
}
public T getValueOne() {
return valueOne;
}
public void setValueOne(T valueOne) {
this.valueOne = valueOne;
}
public T getValueTwo() {
return valueTwo;
}
public void setValueTwo(T valueTwo) {
this.valueTwo = valueTwo;
}
public static void main(String[] args) {
MyObject<String> object = new MyObject<>("String one!", "String two");
System.out.println("value one " + object.valueOne + " value two " + object.valueTwo);
}
}
复制代码
- アングルブラケットと、変数T型に組み込まMyObjectには、
<>
クラス名の後ろに、囲み。!複数種類を定義する際には可変であってもよい、で<>
カンマ区切り例えばpublic class MyObject<T, U>{…}
、直接変数のタイプのクラス定義に使用すると、型を使用している場合に使用するクラス名とみなすことができます。
2.クラスへの復帰を作るために、一般的なインターフェイスを使用します
- 私が書いたJavaプログラマは、我々はResponseMsgが返されるジェネリッククラス統一応答をカプセル化するために使用するWebインターフェースを書かれていると信じています。
package io.ilss.advanced.generic;
public class ResponseMsg<T extends BaseData> {
public static int SUCCESS_CODE = 1;
public static int ERROR_CODE = 0;
public static int OTHER_CODE = -1;
private int code;
private String msg;
private T data;
public static <U extends BaseData> ResponseMsg sendSuccess(U data) {
ResponseMsg<U> responseMsg = new ResponseMsg<>();
responseMsg.code = SUCCESS_CODE;
responseMsg.data = data;
responseMsg.msg = "Remote Call Success!";
return responseMsg;
}
public static <U extends BaseData> ResponseMsg sendError(U data, String msg) {
ResponseMsg<U> responseMsg = new ResponseMsg<>();
responseMsg.code = ERROR_CODE;
responseMsg.data = data;
responseMsg.msg = "Remote Call Error";
return responseMsg;
}
public static <U extends BaseData> ResponseMsg sendOther(U data, String msg) {
ResponseMsg<U> responseMsg = new ResponseMsg<>();
responseMsg.code = OTHER_CODE;
responseMsg.data = data;
responseMsg.msg = msg;
return responseMsg;
}
public static void main(String[] args) {
System.out.println(ResponseMsg.<MyObject>sendSuccess(new MyObject<String>("asdf","asfd")));
}
@Override
public String toString() {
return "ResponseMsg{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
复制代码
- 上に焦点がある
<U>
静的メソッドを持つ私はカプセル化しResponseMsg
、建物をのみ、あなたはゲッターセッターメソッドを記述、または直接プライベートメソッドにすることはできません人々はクラスに通過させるための静的メソッドの呼び出しを提供する必要があります。
- 使用する一般的な方法ならば、前の戻り値の型に必要なタイミングを一緒に使用することができる場合のみです。メソッド呼び出しの前で直接起動すると
<>
、着信クラスあなたが使用したいです。上記に示したように、方法は、それらの一般的なジェネリッククラス定義に直接渡されてもよいです。
- さらに、それはまたすることができます
extends
あなたが特定のサブクラスで定義するか、またはインターフェイスを実装します。複数のインターフェースが存在する場合、そのようなを、&に接続することができる<T extends Comparable & Serializable>
汎用の複数が存在し得る場合、<T extends OneObject, U extends TwoObject>
3.注意
私について
- 杭州、通常の学部読み取り、コンピュータ科学と技術的専門知識、卒業20年、練習段階に現在ある座標。
- 主にJava開発を行って、Golang、シェルについて書きます。この方向に行う準備ができマイクロサービス、興味ビッグデータ、。
- 狂った兄が学習され、新人の段階では、あなたの首長は、スプレーを点灯し、現在です。
- 私はあなたと交換アヒルを歓迎します!!!