Java - Runtime获得Generic Type的Type Argument

Java的Type Erasure是一个我个人非常不喜欢的“特性”。在Runtime无法获得Generic type的Generic Type Argument会使很多代码看上去非常冗余。我们举个例子。
假设要实现如下的功能:class Factory<T>有一个方法createInstance,其parameterized type需要能通过这个方法创建type T对应的实例。比如new Factory<String>().createInstance()需要返回一个String instance.

Java
class Factory<t> {
    public Object createInstance() {
        // create an instance of T
    }
    // other stuffs ...
}</t>

看上去很简单的需求在Java里却几乎没办法实现。因为Java的Type Erasure使你无法在createInstance这个方法中在运行时获取type parameter T的class object。所以一般我们只能按照下面这样去实现这个方法:

Java
class Factory<t> {
    // 传入class object
    public Object createInstance(Class clazz) {
        clazz.newInstnace();
    }
    // other stuffs ...
}
 
new Factory<integer>().createInstance(Integer.class);</integer></t>

这里Integer.class这个参数看着非常不舒服,因为明明这个factory对象已经从Generic Type Argument中获得了String这个名字,但我们不得不重复一遍。另外,Java的ArrayList的toArray()方法就是一个实际的例子,你必须要这样去用它:

Java
List<integer> aList = new ArrayList</integer><integer>();
aList.toArray(new Integer[0]);</integer>

最近习得了一个trick能够利用Java类型继承获取Generic Parameter Type,记录一下也正好可以分享给碰到同样问题的朋友。

»Read More

使用 AMD、CommonJS 及 ES Harmony 编写模块化的 JavaScript

[译] Internet Explorer 的创新

译者按

IE 曾是 web 创新的先驱,但最近几年因为对 web 标准的支持落后于其他浏览器以及低版本 IE 的各种 bug 而被人诟病。雅虎的 Nicholas C. Zakas 带我们回顾了 IE 在 web 发展过程中扮演的辉煌角色,让我们能以一个更客观的眼光来看待 IE。看完这篇文章,也许大家都会对 IE 浏览器有一定的改观,这也是我翻译这篇文章的目的。

译文

在 Internet Explorer 成为大家都恨之入骨的浏览器的很久以前,它曾是整个互联网的创新驱动力。有时候我们很难记得那些在 IE 6 成为全世界 web 开发者的灾难之前 IE 所作的贡献。不管你信不信,正因为有了 IE 4—6,才会有我们现在所知的 web 开发。IE 的一些独特的功能过去就曾是事实标准,后来成为了官方标准最终进入了 HTML5 规范。人们也许很难相信,对于我们现在认为理所应当的功能中有很大一部分都应该要归功于 IE,但快速地回顾一下历史可以让我们知道的确如此。

DOM

如果 IE 是一个人人都痛恨的浏览器,那么「文档对象模型」(DOM)就是人人都痛恨的 API 了。你可以说 DOM 过于繁琐、不适合 JavaScript 甚至是有些荒谬,而且这些也都没错。然而,DOM 还是给了开发者通过 JavaScript 来访问网页的每个部分的途径。曾经你一度只能通过 JavaScript 访问页面中某些特定的元素。IE 3 和 Netscape 3 只允许程序访问表单元素、图片以及链接。Netscape 4 改进了这一点,把程序可访问的范围通过 document.layers 扩展到了它特有的 layer 元素。IE 4 作了进一步改进,把这个范围通过 document.all 扩展到了页面的所有元素。

»Read More

Semantic HTML

再分享一份 slides,在公司的分享会上刚讲的与 HTML 语义相关的内容。

Semantic HTML (请在 Firefox / Chrome / Safari 下观看)

主要是关于 HTML 的语义的意义,以及 HTML5 规范中部分元素、属性、属性值的含义,没有包括表单元素和交互元素。里面有不少应用场景的例子,多数是来自 HTML5 草案,也有一部分是自己写的。描述的文字与规范内容不一定完全一致,有些是自己的理解。

经过近期的研究,以后用 HTML 写文章、文档的时候也有了更加清晰的认识,对一些使用场景也可以少一些纠结了。

欢迎大家拍砖。

简单的 JavaScript 色彩处理库 - kolor

最近写了一个 JavaScript 的色彩处理工具库,起名 kolor。主要可以用来做颜色在不同色彩空间的格式转换、简单的变换输出等。

项目介绍页面放在 Github Pages 上了:http://justineo.github.com/kolor/

这里也就大致介绍下吧。

支持的色彩空间

  • RGB(A)
  • HSL(A)
  • HSV(A)

»Read More