`
李灵晖-raylee
  • 浏览: 128600 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论
文章列表
这一章节我们讨论一下类型擦除。 1.什么是类型擦除? 在java里面泛型其实是伪泛型,因为他都只是在编译器里面实现的,在jvm里面是没有泛型的概念。 我们看下面的代码: package com.ray.ch11; import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<Integer> list1 = new ArrayList<Integer>(); ArrayList<String> li ...
这一章节我们来展示一下怎样利用泛型构建复杂模型? 1.元组列表 我们之前已经说过元组是一个复杂的模型,可以返回多对象。 package com.ray.ch11; import java.util.ArrayList; public class Test { public ArrayList<Tuple<A, B, C>> test() { ArrayList<Tuple<A, B, C>> list = new ArrayList<Tuple<A, B, C>>(); for (int i = 0; i & ...
这一章节我们来讨论一下泛型方法的使用。 泛型除了可以作用在类、接口上面,还可以作用在方法上面。 1.例子 package com.ray.ch13; public class Test { public <T> void test(T x) { System.out.println(x.getClass().getName()); } public static void main(String[] args) { Test test = new Test(); test.test("1"); test.test(1); test. ...
这一章节我们来讨论一下泛型接口的使用。 我们以生成器为例子(generator),生成器是工厂方法的一种运用,主要用来创建对象,一般使用工厂方法都是需要输入参数以便取得不同的对象,但是生成器是生成一系列的对象。 代码: package com.ray.ch13; import java.util.Iterator; import java.util.Random; public class Test implements Generator<Father> { private Class<?>[] classes = { Sub1.class, Sub2.cla ...
这一章节我们来讨论一下利用元组的方式返回多类型对象。 1.定义元组 @SuppressWarnings("hiding") class Tuple<A, B> { public final A a; public final B b; public Tuple(A a, B b) { this.a = a; this.b = b; } } 这里可能有人会问到安全的问题,我们做出一些解释:大家注意我们的属性域都是使用了final,这样迫使创建新的对象,而不是对原对象进行修改。 2.利用元组的方式返回多个对象 package com.ray. ...
这一章节我们来讨论一下泛型与容器,准确来说是由于容器的需求而产生泛型的需求。 我们平常在编程的时候,大部分都是用了容器来装载对象,我们来看一下容器的演变。 1.普通容器 package com.ray.ch11; public class Test { public stat ...
这一章节我们来讨论一下接口与类型信息。 在之前的章节里面我们提到接口,父类引用子类对象,然后把方法给缩窄了,但是我们这一章节学习到反射,这个约束就变得没有那么严格。 我们来看看下面的例子: package com.ray.ch11; public class Test { public static void main(String[] args) { Person man = new Man(); man.sleep(); man.run(); // man.say();//error } } interface Person { public void slee ...
这一章节我们讲述一下代理以及动态代理。 1.为什么需要代理? 答案:有一些操作你不想整合到逻辑代码里面,因此需要代理来做这个事情。例如:日志、监控等 下面将演示一个简单的代理: package com.ray.ch11; public class Test { public static void test(InterFace interFace) { interFace.doSomething(); interFace.doElsething(); } public static void main(String[] args) { test(new RealObjec ...
这一章节我们来讨论一些利用反射提取类的方法与构造器。 1.例子 package com.ray.ch11; import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class Test { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main(String[] args) { try { Class<Person> personClass ...
这一章节主要讲述一下三个检测对象类型的方法instanceof、isInstance和isAssignableFrom。 例子: package com.ray.ch12; public class Test { public static void main(String[] args) { try { Class<? extends Father> AClass1 = (Class<? extends Father>) Class .forName("com.ray.ch12.Sub"); System.out.pr ...
这一章节我们来讨论一下Class对象的泛化。 1.为什么需要泛化? 代码在编译时就可以进行类型检测,不需要等到运行时才检测类型。 2.例子 package com.ray.ch12; public class Test { public static void main(String[] args) { try { Class AClass1 = ...
这一章节我们来讨论一下得到Class对象的另一种方式.class。 1.例子 package com.ray.ch12; public class Test { public static void main(String[] args) { System.out.println(Person.class.getName()); } } class Person { static { System.out.println("loading person"); } public Person() { System.out. ...
这一章节我们接着上一章节,继续讲述Class对象的使用与注意点。 1.使用例子 package com.ray.ch11; public class Test { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main(String[] args) { try { Class<Swimmer> swimmerClass ...
这一章节我们来介绍一下Class对象。 在介绍前有几点需要注意的: 1.每一个类都有一个Class对象,在jvm的类加载器子系统里面生成。 2.类加载器子系统包含类加载器链,但是只有一个原生加载器,原生加载器主要加载javaapi里面的可信的类。 3.只有当类被使用的时候才会加载,这个称之为动态加载。 4.只有加载了Class,才能new这个类的所有对象。 由于前面几点都暂时没有办法证明,只能当概念记住,我们下面举例说明最后一点: package com.ray.ch11; public class Test { public static void main(String[] args) ...
这一章节我们来讨论一下为什么需要RTTI(Run-Time Type Identification)。 答案:RTTI维护类型的信息,为多态机制的实现提供基础。 1.怎么为多态的实现提供基础? 多态,主要就是通过向上转型,然后通过泛化来父类引用子类对象。 ...
Global site tag (gtag.js) - Google Analytics