1.泛型类
普通的类
public class Dog {
private Object age;
public Dog(Object age) {
this.age = age;
}
public Object getAge() {
return age;
}
public static void main(String[] args) {
Dog dog=new Dog("28");
System.out.println(dog.getAge());
}
}
这样的代码是完全可以执行了,那为什么还需要泛型类?
1.安全性
public class Dog {
private Object age;
public Dog(Object age) {
this.age = age;
}
public Object getAge() {
return age;
}
public static void main(String[] args) {
Dog dog=new Dog("28");
Integer age=(Integer) dog.getAge();
System.out.println(age);
}
}
上面的代码编译是完全可以通过的,但是执行的时候就会出现ClassCastException异常
2.可读性好,省去了反复的强制类型转换。
对于泛型类,java编译器会将泛型代码转换成普通的非泛型代码,
所以对于虚拟机来说,是没有泛型类的概念的。
为什么这么设计呢?应为泛型是jdk6以后才有的,为了向下兼容。
泛型方法:
public class TestMethod {
public static <T> boolean isHas(T[] arr, T elemt){
for(T t:arr){
if(t.equals(elemt)){
return true;
}
}
return false;
}
public <S> boolean isString(S s){
if(s instanceof String){
return true;
}
return false;
}
public static void main(String[] args) {
Integer[] arr={1,5,6,8};
System.out.println(isHas(arr,8));
TestMethod testMethod=new TestMethod();
System.out.println(testMethod.isString(5));
}
}
一个方法是不是泛型和他的类是不是泛型没有任何关系。
泛型方法需要在方法的返回值前先声明,在从后面的代码中使用。
泛型接口:
参照Comparable接口。
public class TestComparable implements MyComparable<TestComparable>{
private Integer n;
public TestComparable(int n) {
this.n = n;
}
@Override
public boolean isEquals(TestComparable testComparable) {
return this.n.intValue()==testComparable.getN().intValue()?true:false;
}
public Integer getN() {
return n;
}
public static void main(String[] args) {
TestComparable testComparable1=new TestComparable(2);
TestComparable testComparable2=new TestComparable(2);
System.out.println(testComparable1.isEquals(testComparable2));
}
}
interface MyComparable<T> {
boolean isEquals(T t);
}
类型参数继承某个类
/**
* 测试继承class
*/
public class TestInheritClass<T extends Father>{
private T t;
public TestInheritClass(T t) {
this.t = t;
}
void output(){
System.out.println(t.getName());
}
public static void main(String[] args) {
Child child=new Child("李逵");
TestInheritClass<Child> t=new TestInheritClass<>(child);
t.output();
}
}
class Father{
private String name;
public String getName() {
return name;
}
public Father(String name) {
this.name = name;
}
}
class Child extends Father{
public Child(String name) {
super(name);
}
}
/**
* 测试继承接口
*/
public class TestInheritInterface<T extends IFruits> {
private T t;
public TestInheritInterface(T t) {
this.t = t;
}
void output(){
t.shape();
}
public static void main(String[] args) {
Apple apple=new Apple();
TestInheritInterface<Apple> t=new TestInheritInterface<>(apple);
t.output();
}
}
interface IFruits{
//形状
void shape();
}
class Apple implements IFruits{
@Override
public void shape() {
System.out.println("苹果是圆形的。");
}
}
1590

被折叠的 条评论
为什么被折叠?



