- 泛型的使用范围远远不止集合,它可以应用到一般的类中,在下面的例子中
Apple<String> apple = new Apple<>("apple"); Apple<Double> apple1 = new Apple<>(5.67);这两句都会生成Apple的逻辑子类,之所以叫逻辑子类,是因为他们在物理上并不存在, Apple<T>形参T根据传入的实际类型进行变化匹配,以下为代码实例
//泛型的使用范围远远不止集合,在一般的类中也可以使用泛型 package UseIt; public class Apple<T> { private T info; public Apple(){} public Apple(T info){ this.info = info; } public void setInfo(T info){ this.info = info; } public T getInfo(){ return this.info; } public static void main(String args[]){ Apple<String> apple = new Apple<>("apple"); System.out.println(apple.getInfo()); Apple<Double> apple1 = new Apple<>(5.67); System.out.println(apple1.getInfo()); } } //输出内容: // apple // 5.67
-
当从泛型类派生子类的时候,要用具体的数据类型代替泛型,也就是说public class A1 extends Apple<T>{}这用的代码是错的,因为它没有用具体的数据类型代替泛型,一下为泛型类派生子类的代码实例(这里的Apple就是上面的Apple)
package UseIt; public class A1 extends Apple<String> { public String getInfo(){ return "子类中的方法:" + super.getInfo(); } // public Object getInfo(){ // return "子类"; // } public static void main(String args[]){ A1 a1 = new A1(); a1.setInfo("java1"); System.out.println( a1.getInfo()); } } //输出结果 // 子类中的方法java1
-
并不存在泛型类,或者说这些泛型类在内存中都是使用同一块内存,系统并不会为这些泛型类当做新类来处理,这些泛型类仅仅只是“看起来”是子类而已,所以,泛型变量是不可为成员变量或者在静态方法中的,以下为代码示例
package UseIt; public class R<T> { // static T info; // 这一句会报错,因为泛型是不可以作为成员变量的 T age; public void foo(T age){} // public static void bar(T msg){} // 这个方法也会报错,因为泛型是不可以再静态方法中的 public static void main(String args[]){ R<String> r = new R<>(); R<Double> r1 = new R<>(); boolean isEquals = r.getClass() == r1.getClass(); // 这里的isEquals是True,说明了系统并没有把它们当成新类来处理 } }
java泛型(2) 泛型在一般类中的使用
猜你喜欢
转载自blog.csdn.net/weixin_39452731/article/details/81414266
今日推荐
周排行