2、Java中的范型不能像C++那么灵活。
. b" x. p! e% P& {; w
8 n5 F" b3 e! U! e) S, ^ 1. T add(T a,T b)
0 F, C$ [9 A3 N2 R N' y l; Z, j 3 k! C( V' p: F& e. T! Y4 h2 D
2.
3 n+ O) U' g; z; }1 N: h/ i* \ ; o; x' }' N/ b# c% b7 m
3. {
4 g% O. w6 _, {$ g J! _
* S0 S1 x3 w5 T 4.9 g4 V/ ]7 P6 [) x' h; F1 \ ^
0 a: F% Y" r# h, c 5. //return a+b ;//很多人以为java也想C++一样可以这样 ,但是不可以 .
) c: ]5 c, ?$ o- J* n+ n 4 I- U6 J, z2 s. U7 _
6.
i% C* ]) v2 \% Q 8 N/ b2 K+ [! g8 l) ~& p
7. return null;
8 ?' [# D4 t% \# P& Z1 P0 y
$ L- \. Y2 Z* {: t e+ S9 v, l+ u 8. }- l$ ^) U) [3 H
4 n+ ^' Z6 ~' c2 v4 H' N$ o
这个返回的null 也是有类型限制的,比如上面的a b分别是Integer和String 那么就会取他们共同的基类Object做为返回值类型,其他的同理。
( u" D, f6 |2 D" S" G
8 Z9 J+ {& {0 H# y- k7 S7 ~9 N8 } 3、实现任意类型的数组的成员值的交换,注意在自定义范型中范型的实际类型只能是引用数据类型,不能是基本数据类型。4 N8 t% [$ \! q. U# ]& S
4 d% ?. T/ l6 z1 h 1. public static void swap(T[]a,int x,int y)" a# A) ?3 W! R- m1 Z) G$ J/ g" A/ {
1 O# T- b* K6 u 2. {
, G* n' J9 T! R( h7 { A2 G) @2 H % o* V4 B/ B/ H" k
3. T tem =a[x] ;
, B! ~) ]. u$ i8 r2 O - y5 t6 i6 k1 @2 u
4. a[x]=a[y] ;
) F( a" W' c& [* V ) H9 t7 S3 s6 {( C' Q
5. a[y]=tem ;
% Z4 ^# \0 ~" r" X; W5 r. ^* w
4 K! J$ N2 \3 H& \, f% I# @1 j! Y 6.
# `9 j _$ U5 W# o# X' X; s( O
/ g( `$ G. w5 _ 7. }* f+ ]9 q" W1 u$ y0 x& W+ a
" T) Q8 N l" P* d: _
上面这个方法如果我swap(new Integer[]{1,2,3,4,5},1,2); //这样就会自动交换下标1 2的值4 g8 L; x6 w- Q# a7 j
5 i: Y+ \8 K$ l& b
但是这样调用就错了swao(new int[]{1,2,3,5,6},2,3) ; //所以说Java的范型的实际类型只能是引用数据类型- o( u! u( T3 _/ L, b, x, U; L
! z3 g+ y& h: O
4、$ p' G( j l7 w$ y3 E
9 Q% G3 s: d( v8 c8 N; L0 _$ T
表示类型只能是String或者String的派生类
: i9 U0 H2 D% i8 h7 w3 Z; V1 x ( h2 Y) V: G4 v
表示范型类型只能是String或者String的父类% h6 Q7 x5 b' O% g
; {4 l% Q& A6 x+ S* U9 s0 f: T& Y 用法同上
( t1 E1 e' W" |0 b" d
% E. e4 {) O o' }& f 5、下面这个函数利用范型来实现类型自动转换的功能。
( [* F9 F- s/ p/ N/ f Q# A' G% Z; E/ ?0 K
1. public static T autoConvert(Object obj)0 A P W/ H1 g( U, i
. T0 j$ F, d3 |5 q
2. //因为返回值是 T标识任意类型 所哟可以 将返回结果赋值给任意类型对象
3 F* M: p. x2 G7 P; W* N
1 n% ?5 a8 c/ W" l 3. {: H' @$ O/ |4 ^! |
4 T) Y6 [6 J' S L
4. return (T)obj;0 H: g- S, ]9 p5 }: u4 B
4 T, O7 V& p) }% }9 D& H$ z( m0 c$ u 5. }
9 \9 t" g; u$ g" B3 g5 W
# k- D7 V. W( A( ]0 | 6. Object obj=="";$ ~) W- k0 r1 I
* \; s F7 _2 o# q t1 { 7.
# D3 {2 }* O0 B, V5 ~
! t- p$ x5 W0 f2 G' j: \ 8. String str=autoConvert(obj);3 l2 Q" N! I0 G: Q+ f7 e
) e* D/ y1 h3 D6 U* ]' f 可以完成自动转换,因为范型T代表任意类型,因此他可以赋值给String类型的对象。 |