是否可以在Java中模拟Javascript风格的原型



我想知道是否可以在Java中模拟Javascript原型。在Java中,是否可以将变量列表与函数相关联?如果可能的话,我想创建一些类似于Javascript原型的东西。

这里有一个例子(在Javascript中):

    var s = doStuff.prototype;
s.isImplemented = false;
function doStuff(){
    //this function has not yet been implemented
}
var s = functionIsImplemented.prototype;
s.isImplemented = true;
function functionIsImplemented(theFunction){
    //this function returns true if the function has been identified as "implemented"
    if(theFunction.prototype.isImplemented == true){
        return true;
    }
    return false;
}
alert(functionIsImplemented(doStuff)); //this should print "false"
alert(functionIsImplemented(functionIsImplemented)); //this should print "true"​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

有什么方法可以在Java中实现类似的功能吗?

是的,这当然是可能的,并且在某些情况下非常有用。

通常情况下,您会执行以下操作:

  • 创建一个包含属性映射的类。这将成为所有原型的"基本对象"类。K可能是字符串,V可能是对象
  • 为您的属性创建getter和setter
  • 可选地添加其他实用程序方法,例如,检查函数是否实现基本上意味着检查属性映射是否包含特定键
  • 通过克隆另一个对象的属性映射或(更复杂的)保留对原始对象的引用来实现基于原型的继承
  • 使用某种函数对象允许在属性中存储任意代码

它不像在动态语言中直接这样做那么优雅,但它可以工作,并为您带来同样的好处(运行时灵活性,避免严格OOP的限制,快速预测等)

它也有同样的缺点——静态类型检查的损失和一些性能开销是主要的缺点。

举个例子,我写的开源游戏(Tyrant)对所有游戏中的对象都使用了这种方法。

最新更新