3

我想知道是否可以在 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 中做到这一点?

4

1 回答 1

4

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

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

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

它不像您直接使用动态语言那样优雅,但它可以工作并为您带来相同的好处(运行时灵活性、避免严格的 OOP 约束、快速原型制作等)。

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

例如,我编写的开源游戏 ( Tyrant ) 对所有游戏内对象都使用了这种方法。

于 2012-07-19T04:24:22.163 回答