1。一般的なクラス
1.1通常のジェネリック
コードコピーは次のとおりです。
パッケージtest.lujianing;
/**
*ジェネリッククラス
* @param <t>
*/
クラステスト<t> {
プライベートt obj;
public void setValue(t obj){
this.obj = obj;
}
public t getValue(){
System.out.println(obj.getClass()。getName());
OBJを返します。
}
}
/**
*一般的なクラスをテストします
*/
パブリッククラスのtestone {
public static void main(string [] args){
//整数genericをテストします
test <integer> t1 = new test <integer>();
T1.SetValue(5);
integer i = t1.getValue();
System.out.println(i);
//ダブルジェネリックをテストします
テスト<double> t2 = new test <double>();
t2.setValue(5.55d);
double d = t2.getValue();
System.out.println(d);
//テスト文字列generic
test <string> t3 = new Test <String>();
t3.setValue( "Hello World");
string str = t3.getValue();
System.out.println(str);
}
}
出力結果:
コードコピーは次のとおりです。
java.lang.integer
5
java.lang.double
5.55
Java.lang.String
こんにちは世界
1.2 k/vジェネリック
コードコピーは次のとおりです。
パッケージtest.lujianing;
java.util.hashmapをインポートします。
java.util.mapをインポートします。
/**
* 14-3-30に管理者によって作成されました。
*/
クラスtestkv <k、v> {
プライベートマップ<k、v> map = new hashmap <k、v>();
public void put(k k、v v){
map.put(k、v);
}
public v get(k k){
map.get(k)を返します。
}
}
パブリッククラスのtestfour {
public static void main(string [] args){
testkv <string、string> t = new testkv <string、string>();
T.put( "name"、 "Jianing");
System.out.println(T.get( "name"));
testkv <string、integer> t2 = new testkv <string、integer>();
t2.put( "age"、24);
system.out.println(t2.get( "age"));
}
}
出力結果:
コードコピーは次のとおりです。
jianing
24
2。一般的なインターフェイス
コードコピーは次のとおりです。
パッケージtest.lujianing;
/**
*一般的なインターフェイス
* @param <t>
*/
パブリックインターフェイスtestimpl <t> {
public void setValue(t t);
public t getValue();
}
出力結果:
コードコピーは次のとおりです。
1
こんにちは言葉
3。一般的な方法
コードコピーは次のとおりです。
パッケージtest.lujianing;
/**
*一般的なメソッドクラス
*/
クラスのtestmethod {
/**
*一般的な方法
*/
public <t> t getValue(オブジェクトS、クラス<t> clazz){
System.out.println(clazz.getName());
t t = null;
if(clazz.getname()。equals( "java.lang.integer")){
double d = double.parsedouble(s.tostring());
int i = d.intvalue();
t =(t)new Integer(i);
}
if(clazz.getname()。equals( "java.lang.double")){
t =(t)new double(s.toString());
}
tを返します。
}
}
/**
*一般的なメソッドテストクラス
*/
public class test -three {
public static void main(string [] args){
testMethod t = new testMethod();
int i = t.getValue( "30.0011"、integer.class);
System.out.println(i);
double d = t.getValue( "40.0022"、double.class);
System.out.println(d);
}
}
出力結果:
コードコピーは次のとおりです。
java.lang.integer
30
java.lang.double
40.0022
4。ジェネリックを制限します
上記の例では、クラステスト<T>タイプホルダーTの範囲に制限はなく、デフォルトの制限タイプはオブジェクトと同等です。たとえば、Tをデジタルインターフェイスタイプに制限する必要があります。これを行います。クラス<t拡張されます。
5。野生のジェネリック
コードコピーは次のとおりです。
パッケージtest.lujianing;
java.util.hashmapをインポートします。
java.util.mapをインポートします。
/**
*野生のジェネリック
*/
パブリッククラスのtestfive {
public static void main(string [] args){
map <string、class <?
map.put( "integer"、integer.class);
map.put( "double"、double.class);
for(map.entry <string、class <?拡張番号>> entry:map.entryset()){
System.out.println( "key:" + entry.getKey() + "value:" + entry.getValue());
}
}
}
出力結果:
コードコピーは次のとおりです。
キー:ダブル値:クラスJava.lang.Double
キー:整数値:クラスjava.lang.integer
簡単な例:1.1の例
コードコピーは次のとおりです。
public static void main(string [] args){
//整数genericをテストします
test <integer> t1 = new test <integer>();
T1.SetValue(5);
楽しみ(T1);
//ダブルジェネリックをテストします
テスト<double> t2 = new test <double>();
t2.setValue(5.55d);
楽しみ(T2);
}
public static void fun(test <?> t){
System.out.println( "wild generic" + t.getValue());
}
出力結果:
コードコピーは次のとおりです。
java.lang.integer
野生のジェネリック5
java.lang.double
野生のジェネリック5.55
6。サプリメント
ジェネリックでは、<t> <e>などに遭遇する可能性があります。TとEは、それぞれタイプと要素のイニシャルです。 eは通常、リストインターフェイスの定義など、コレクションタイプの要素のタイプを表すために使用されます。パブリックインターフェイスリスト<e>拡張コレクション<e>。これは単なる命名習慣であり、2つの間に本質的な違いはありません。