有没有办法将自己(这个)与Java中的其他对象交换?
在Smalltalk中我们可以写
Object subclass:myClass [
"in my method I swap myself with someone else"
swapWith:anObject [
self become:anObject.
^nil
]
]
myClass subclass:subClass [
]
obj := myClass new.
obj swapWith:subClass new.
obj inspect.
结果显然是An instance of subClass
。
我需要在Java中执行以下操作:
那么,简而言之,我如何在Java self become: (someClass new:someParameters)
中实现?我可以使用一些已知的设计模式吗?
答案 0 :(得分:4)
在最常见的形式中,任意对象交换都无法与静态类型协调。这两个对象可能具有不同的接口,因此这可能会危及类型安全。如果对如何交换对象施加约束,则可以使这种特征类型安全。这样的特征从未成为主流,但已经在研究中进行了调查。请改为Gilgul。
密切相关的是重新分类,即动态更改对象类的能力。这可以在Smalltalk中使用一些原语。同样,这使得类型安全处于风险之中,从未成为主流,但已经在研究中进行了调查。查看Wide Classes,Fickle或Plaid。
穷人的对象交换解决方案是一个代理,您可以在客户端和要交换的对象之间插入,或者使用状态和策略设计模式。
答案 1 :(得分:3)
Here是官方论坛上的一个有趣话题。我相信对象强制与强类型结合使得这个函数无法在Java中工作。加上已经很慢的JVM,这可能导致灾难......
答案 2 :(得分:-1)
this
是Java中的保留字,您无法覆盖它。
您尝试做的事情可以通过简单的参考来实现。您只需迭代(或浏览图表)并将指针更改为您想要激活的内容。
考虑一下:
List<String> stringList = new ArrayList<String>();
// fill your list
String longestWord = "";
for (String s : stringList) {
if (longestWord.length() < s.length()) {
longestWord = s;
}
}
longestWord
现在指向另一个对象。