文章列表
Java中的泛型与C++中的模板
- 博客分类:
- Core Java
以前都没有注意到Java中的泛型有那么复杂!功能还比C++中的模板差那么多。这绝对是Java中最失败的一个地方。改天要专门写一写这方面的东西,现在先挖个坑。
C++中的混型允许直接继承类型而不是具体的类,这是Java做不到的。
template <typename T>
class A : public T
{};
这样A类就具备了随时可以插入进去的T类型的所有public成员!即是我可以随时杂交出各种各样我想要的子类,而不必要一一在继承树上静态地声明、静态地编译。
Java必须借助实现接口来实现混型效果 ...
1 它源于Java,可以说是一种JVM实现
2 它拥有了很多例如Ruby一样的动态语言上的特性。
Java可以几乎无缝地域Groovy融合,Groovy也几乎可以无缝地与Java融合。到底哪个在上哪个在下我已经分不清楚了。
前不久,InfoQ向大家推荐了几本有关软件架构的新书
,引起了国内读者的广泛兴趣。其中一本是《开源应用架构(The
Architecture of Open Source Applications)
》,来自知名开源项目的各位作者对软件的设计进行了说
明。通过对这些成功的系统架构进行概览,让软件工程师可以彻底了解最佳实践和陷阱。InfoQ中文站响应读者的需求,整理了该书有关知名开源软件架构的精
彩内容,供国内开发社区借鉴。本期介绍的是著名浏览器自动化工具Selenium WebDriver的软件架构,第一部分主要分享了Selenium
WebDriver的演变历史和架构观点。
...
关于ant与maven
- 博客分类:
- 开发工具
Ant是一个赫赫有名的工具,但我从没有专门用过。因为现成的IDE似乎都集成了Ant的功能,可以自动地把Java项目打包起来生成一个项目。
从Ant的历史来看,Ant源于Unix的make工具是没有错的。但是make工具有很多缺陷,而且又与Unix耦合起来。对于跨平台的Java项目,要如何组织呢?Ant诞生了。
Ane本身就是这样一个流程脚本引擎
,用于自动化调用程序完成项目的编译,打包,测试等。除了基于JAVA是平台无关的外,脚本的格式是基于XML的,比make脚本来说还要好维护一些。
Maven则是在Ant的基础上更进一步,适应不同的多版 ...
一篇很好的在eclipse中使用junit4教程
- 博客分类:
- 测试
jUnit4
概述
jUnit4
是
JUnit
框架有史以来的最大改进,其主要目标便是利用
Java5
的
Annotation
特性简化测试用例的编写。
先简单解释一下什么是
Annotation
,这个单词一般是翻译成元数据。元数据是什么?元数据就是描述数据的数据。也就是说,这个东西在
Java
里面可以用来和
public
、
static
等关键字一样来修饰类名、方法名、变量名。修饰的作用描述这个数据是做什么用的,差不多和
public
描述这个数据是公有的一样。想具体了解可以看
Core
...
学习Selenium
- 博客分类:
- 测试
我从IBM社区中转载来一篇文章,有意思的地方我专门标记出来了。
原文地址为:http://www.ibm.com/developerworks/cn/java/wa-selenium-ajax/#resources
Web
应用程序的验收测试常常涉及一些手工任务,例如打开一个浏览器,并执行一个测试用例中所描述的操作。但是手工执行的任务容易出现操作人员人为的错误,也比
较费时间。因此,尽可能将这些任务自动化,以消除人为因素,这是一种很好的做法。于是 Selenium
之类的测试工具就有了用武之地。Selenium 帮助您自动化验收测试,从而可以构建经过更严格测试、因而更为 ...
(转发)关于IT行业人员吃的都是青春饭?
- 博客分类:
- 杂感
国内一个很著名的企业老板曾经说过:在IT行业超过35岁的技术人员将被淘汰,所以不要35岁以后的技术人员。导致整个业界尤其是在软件开发行业都在排斥年龄超过35岁的人员,也导致很多工程师为自己35岁以后的前途发愁而转 ...
在一个算法中,使用递归还是迭代是一件很头痛的事情。总的来说,递归的优点很多,适合一些分治算法的实现,而缺点也很多,比如消耗很多的临时空间,有时候还会因为重叠子问题的存在而降低算法的性能。迭代拥有记忆的功能,不仅能够节省一部分临时空间,而且还可以省去很多子问题求解的麻烦。
值得注意的地方有:
1 一般在树形结构中往下走的话,最好使用迭代,比如堆中的向下调整操作。
为什么现在我不喜欢C++而喜欢Java
- 博客分类:
- Core Java
1 C++为了兼容C的语法,保留了很多破坏面向对象特性的关键字。简而言之,C++在OO上不够纯正。
2 C++里随时都存在一个sliced object的陷阱,我个人还没有找到一个明确的编码原则来避免这些错误。
3 Java能够在一片连续的内存中安置各式各样的对象,而C++总是力图做到精简的布局,抹杀了多样性--比如C++ 不支持不规则的多维数组、不规则的向量vector。
4 Java本身已经超越了一门语言,成为一个平台,有足够的兼容性够好的各方面的library。而C++各自为战太多年,现在还没有一个一统天下的趋势。按照斯特朗普 ...
理论:
表达式的表示形式有中缀、前缀和后缀3中形式。中缀表达式按操作符的优先级进行计算(后面代码实现只包括+、-、*、\,小括号),即数学运算。后缀表达式中只有操作数和操作符。操作符在两个操作数之后。它的计算规则非常简单,严格按照从左到右的次序依次执行每一个操作。每遇到一个操作符,就将前面的两个数执行相应的操作。
由后缀表达式计算中缀表达式原理:计算机处理后缀表达式求值问题是比较方便的,即将遇到的操作数暂存于一个操作数栈中,凡是遇到操作数,便从栈中pop出两个操作数,并将结果存于操作数栈中,直到对后缀表达式中最后一个操作数处理完,最后压入栈中的数就是后最表达式的计算结果。
...
提出一个问题,如何管理文件差异性?
- 博客分类:
- 软件工程
超级编辑器自带一个超级比较器功能,我目前还不会用。
SVN的different还算不错。
但是Linux下的diff命令真是吓我一跳的强大。
严格来说,正则表达式不是一种语言,它是一种很多语言都已经实现了的一种特化的功能。它是对于某些字符串进行模式匹配的依据。实际上每一种语言中正则表达式的实现都有细节上的差异,足以令人发狂。Java上的正则表达式与Perl上相同。
Linux中的正则表达式似乎也是Perl实现的,待查。
1 最初的OS不能满足足够多的终端同时使用,于是贝尔实验室、通用和MIT发起了一个Multics计划。希望能够制造一个足够强大的多任务、多用户系统。
2 Multics项目搁浅,贝尔实验室退出。但是贝尔实验室的工程师汤普森得 ...
一 获取类引用的方法
(1) getClass() 获取已经初始化的对象的一个Class引用。
(2) Class.forName() 告诉编译器,如果类没有加载,就加载它。
(3) .class 字面常量 这个性能会更好,第一它增加了编译时的类型强制检查,第二它没有做对forName()方法的调用。
二 巧妙地利用编译器为我们做一些Class引用的类型检查。
我们如果使用平凡的Class对象,实际上它可以被一切Class对象引用赋值。
为了增加类型检查,我们可以把Class对象当作一个泛型模板。强制使用Class<?&g ...