是否有一种方法可以在给定类名(动态)的情况下创建特定类的实例,并将参数传递给它的构造函数。

喜欢的东西:

Object object = createInstance("mypackage.MyClass","MyAttributeValue");

其中“MyAttributeValue”是MyClass构造函数的参数。

我最近比较了[]和list()的处理速度,惊讶地发现[]比list()快三倍多。我用{}和dict()进行了相同的测试,结果几乎相同:[]和{}都花了大约0.128秒/百万次循环,而list()和dict()分别花了大约0.428秒/百万次循环。

为什么会这样?[]和{}(和probably()和",太)立即传递回一些空股票文字的副本,而他们的显式命名对应(list(), dict(), tuple(), str())完全创建一个对象,无论他们是否实际上有元素?

我不知道这两种方法有什么不同,但我很想知道。 我在文档或SO上找不到答案,而且搜索空括号的问题比我想象的要多。

我通过调用timeit.timeit("[]")和timeit.timeit("list()"),以及timeit.timeit("{}")和timeit.timeit("dict()")来获得计时结果,分别比较列表和字典。我运行的是Python 2.7.9。

我最近发现了“为什么if True比if 1慢?”,它比较了if True和if 1的性能,似乎涉及到类似的字面与全局场景;也许这也值得考虑。

由于Java泛型的实现,你不能有这样的代码:

public class GenSet<E> {
    private E a[];

    public GenSet() {
        a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
    }
}

如何在保持类型安全的同时实现这一点?

我在Java论坛上看到一个解决方案是这样的:

import java.lang.reflect.Array;

class Stack<T> {
    public Stack(Class<T> clazz, int capacity) {
        array = (T[])Array.newInstance(clazz, capacity);
    }

    private final T[] array;
}

但我真的不明白这是怎么回事。