java泛型解析02

原创 2008年09月28日 10:17:00

/**
 * @(#)Generics.java
 *
 *
 * @author
 * @version 1.00 2008/9/27
 */
class Book{
 static int id;
 Book(){System.out.println("Book "+id++);}
 public void pagedown(){System.out.println("pagedown!");}
 }
class EnglishBook extends Book{}
class ChineseBook extends Book{}
class ChineseHistory extends ChineseBook{}


class Generics2<T>{
 private T a;
    public Generics2(T a) {
     this.a=a;
    }
    public void set(T a){this.a=a;}
    public T get(){return a;}
 }

class Generics<T> {
 private T a;
    public Generics(T a) {
     this.a=a;
    }
    public void test(T a){a.pagedown();}
    public void set(T a){this.a=a;}
    public T get(){return a;}   
}

public class Test{
 public static void main (String[] args) {
  EnglishBook e=new EnglishBook();
  Generics<EnglishBook> g=new Generics<EnglishBook>(e);
  g.test(e);
}
 }

 

注意看,class Generics<T>的定义中有一个test方法,你会说了,T到底是什么东西,我不知道,你怎么就知道替换T的类型里就有pagedown这个方法呢?这是完全不合理的吗!!!所以这个一定不会通过编译!!!

 

好了,确实这个不会通过编译!!当然这是在java中的结果!!

 

--------------------Configuration: <Default>--------------------
E:/Code/Java/TIJ-MY/Test.java:32: 找不到符号
符号: 方法 pagedown()
位置: 类 java.lang.Object
    public void test(T a){a.pagedown();}
                           ^
1 错误

Process completed.

 

呵呵,似乎很正常!!

 

看看下面的C++代码:

 

#include<iostream>

using namespace std;

template<class T> class M{
T obj;
public:
 M(T x){obj=x;}
 void m(){obj.f();}
};


class HasF{
public:
 void f(){cout<<"HasF::f()"<<endl;}
};

int main()
{
HasF hf;
M<HasF> m(hf);
m.m();
return 0;
}

 

 

------ 已启动生成: 项目: CppFile, 配置: Debug Win32 ------
正在编译...
hello.cpp
正在编译资源清单...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation.  All rights reserved.
正在链接...
正在嵌入清单...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation.  All rights reserved.
生成日志保存在“file://e:/Code/NET/C++语言/CppFile/CppFile/Debug/BuildLog.htm”
CppFile - 0 个错误,0 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

 

输出:

 

HasF::f()

 

 

哈,似乎C++的本事比java的要大!!java 不能编译的情况下他却能编译!!这就合理了吗??

 

其实呢,我们先前以为的我们并不能预计不知道的类型中有什么样的方法的概念是一种直观的概念,我们以为不应该去揣测不知道的事情,我们应该做确定的事情!!是啊,在很多的情况下是这样的!!而java编译器正好满足了我们这样的想法!!但是C++却不一样,他会去关注事实,如果有他就调用,如果没有呢??当然就是编译时期的错误了!!其实某些设计也会用到这样的特性!!而java却不能提供给我们这样的特性!!因为java把类型参数都给擦除到了Object了!!

 

 

版权声明:本文为博主原创文章,转载请注明出处,Thanks~

Java泛型(二)——使用Gson解析复杂的泛型嵌套泛型数据结构

Gson是由Google自家出来的Json解析库,使用起来兼容性方面当然会有很多优势,而且解析Json数据也很方便,掌握了Gson的一些基本使用之后就可以使用它解析很多复杂的Json数据了。但当我们要...
  • woshimalingyi
  • woshimalingyi
  • 2016年11月15日 17:37
  • 4220

利用Java反射机制和泛型,全自动解析json

有啦这个简直,太爽啦, 利用Java 反射机制,利用Class 就可以得到 类的 变量  Field[] fields=cls.getDeclaredFields(); 还可以通过类中 的方法名字 去...
  • king866
  • king866
  • 2015年08月08日 17:32
  • 3363

GSON解析转化成含有泛型的对象

转自:http://www.cnblogs.com/qq78292959/p/3781808.html 解决的问题:       使用GSON和泛型解析约定格式的JSON串。   ...
  • a314773862
  • a314773862
  • 2016年05月19日 17:30
  • 3331

Java泛型解析(02):通配符限定

1.泛型参数的限定,使用extends关键字,限定多个类型时用"&"隔开。如: 2.泛型参数限定中,如果限定的类型是class而不是interface,则class必须放在限定类表中的第一...
  • ysjian_pingcx
  • ysjian_pingcx
  • 2014年10月13日 09:42
  • 2449

18---java中泛型02(通配符)

1、泛型统配符?:  泛型对象进行引用传递的时候,类型必须一致;  以下会报错:   class Info{    private T var;//定义泛型变量    public voi...
  • bzuld
  • bzuld
  • 2012年03月14日 13:59
  • 238

Java_SE02-04-正则表达式,包装类,日期操作,泛型,集合框架

正则表达式Java中无论正则表达式是否有边界匹配(^$)都是做全匹配验证 boolean matches(String regex); 根据给定的正则表达式来验证当前字符串是否满足格式要求,满足返回...
  • Lh_0618
  • Lh_0618
  • 2016年04月03日 20:05
  • 593

JAVA-泛型02

转载自:https://segmentfault.com/a/1190000002646193 根据《Java编程思想 (第4版)》中的描述,泛型出现的动机在于: 有许多原因促成了泛型的出...
  • VIP_WangSai
  • VIP_WangSai
  • 2017年03月23日 15:01
  • 198

TopCoder02 房间号忘记了。。。JAVA学习笔记02---泛型的应用之分拣数据处理

TopCoder练习题笔记02: 题目大概意思: 给出了3个变量,游泳的距离distances,游泳的速度speed,以及水流的速度,让算出对应的时间 顺流的速度为运动员的游泳速度+水流速度 逆流的速...
  • weixin_38948771
  • weixin_38948771
  • 2017年06月14日 22:27
  • 94

java泛型解析

  • 2013年06月07日 16:48
  • 136KB
  • 下载

02_AsyncTask泛型含义

AsyncTask的泛型含义     泛型含义   private class MyAsyncTask extends AsyncTask {} 我们刚刚说了有三个泛型的 Void,Vo...
  • qq_33781658
  • qq_33781658
  • 2016年04月11日 22:04
  • 572
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java泛型解析02
举报原因:
原因补充:

(最多只允许输入30个字)