我将在前言中说这绝不是一个主要问题,更多的是我在编程语言设计方面没有真正谈过的事情,我想知道是否有人有任何有趣的解决方案。
问题的症结在于此。有时在面向对象的语言中,我希望能够通过其中一种方法修改对象,但返回对象本身而不是该方法返回的内容。
给出一个java示例:
class MyClass{
public MyClass(List<Integer> list){
//do constructor stuff
}
public MyClass(Integer i){
//what I would like to be able to do
this((new LinkedList<Integer>).add(i));
}
}
我无法在第二个构造函数中创建临时列表,因为this()必须是第一行。显然,通过更改实现有很多方法可以做到这一点,比如创建一个返回对象的add()方法,使得构造对象的函数负责制作列表等等。
但是,考虑到很多时候你不能/不想修改或创建一个子类(对于LinkedList),你可能不想混淆调用代码,能够修改并返回一个对象以++ x的风格可能非常有用。就像是
this(#(new LinkedList).add(i)
表示您想要反对,而不是返回方法。有没有人知道一种语言允许这是一些简洁的句法方式?如果没有,这将是有用的还是我错过了一些基本的东西?
答案 0 :(得分:1)
这不会起作用吗?
public class MyClass{
public MyClass(List<Integer> list){
//do constructor stuff
}
public static MyClass create(Integer i) {
List<Integer> list = new new LinkedList<Integer>();
list.add(i);
MyClass myClass = new MyClass(list);
return myClass;
}
}
这是一种常见的设计模式,名为Factory Pattern。
答案 1 :(得分:0)
我认为解决这个问题的最简单方法是从构造函数调用初始化方法。
类MyClass { public MyClass(List list){ INIT(列表); }
public MyClass(Integer i){
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(i);
init(list);
}
protected init(List<Integer> list)
{
// do init stuff here
}
}