泛型的一般格式Test<T>,使用起来很方便,相当于Object,而且和C/C++中的模板差不多。
但是Java的泛型还有一个好处,在于可以限定T的类型,格式如下:
Test<T extends Base>,这样就要求Test的类型必须继承了Base。
注意这里的extends只是一个关键字,不同于表示继承的extends,Base可以是Class,也可以是Interface。
TestInterface.java
public interface TestInterface<T>
{
public T generate();
public double compute();
}
A.java
public class A<T extends TestInterface<T>>
{
public void FooA(T t)
{
t = t.generate();
System. out.println(t.compute());
}
}
BInterface.java
public class BInterface implements TestInterface<BInterface>
{
public String str;
public BInterface generate()
{
BInterface newT = new BInterface();
newT. str = "hahahha" ;
return newT;
}
public double compute()
{
double value = 0;
for (int i = 0; i < str.length(); i++)
{
value += i * ( str.charAt(i));
}
return value;
}
}
main.java
A<BInterface> a = new A<BInterface>();
BInterface b = new BInterface();
b.str = "hello world";
a.FooA(b);
说明:A.java是一个泛型Class,但是要求类型必须implement了TestInterface中的function。