由于Java泛型的实现,您不能拥有这样的代码:
public class GenSet<E> {
private E a[];
public GenSet() {
a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
}
}
Run Code Online (Sandbox Code Playgroud)
如何在保持类型安全的同时实现这一点?
我在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;
}
Run Code Online (Sandbox Code Playgroud)
但我真的不知道发生了什么.
我最近比较了处理速度[]和,list()并且惊讶地发现它的[]运行速度比它快三倍list().我跑了相同的测试与{}和dict(),结果几乎相同:[]和{}两个花了大约0.128sec /百万次,而list()和dict()大约花费每个0.428sec /万次.
为什么是这样?不要[]和{}(可能()和'',太)立即传回文字的一些空股票的份,而其明确命名同行(list(),dict(),tuple(),str())完全去创建一个对象,他们是否真的有元素?
我不知道这两种方法有何不同,但我很想知道.我无法在文档中或在SO上找到答案,搜索空括号结果比我预期的问题更多.
我拨打了我的时序结果timeit.timeit("[]")和timeit.timeit("list()"),和timeit.timeit("{}")和timeit.timeit("dict()"),分别比较列表和字典.我正在运行Python 2.7.9.
我最近发现的" 为什么是,如果真慢于如果为1? "来比较的性能if True来if 1,似乎触及了类似的文字,对全局的情况; 也许值得考虑一下.
有没有办法在给定类名(动态)的情况下创建特定类的实例,并将参数传递给其构造函数.
就像是:
Object object = createInstance("mypackage.MyClass","MyAttributeValue");
Run Code Online (Sandbox Code Playgroud)
哪个"MyAttributeValue"是构造函数的参数MyClass.
有没有办法根据我在运行时知道类的名称来创建类的实例.基本上我会在字符串中有类的名称.
我有一个文件:Base.h
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
/*etc...*/
Run Code Online (Sandbox Code Playgroud)
和另一个文件:BaseFactory.h
#include "Base.h"
class BaseFactory
{
public:
BaseFactory(const string &sClassName){msClassName = sClassName;};
Base * Create()
{
if(msClassName == "DerivedA")
{
return new DerivedA();
}
else if(msClassName == "DerivedB")
{
return new DerivedB();
}
else if(/*etc...*/)
{
/*etc...*/
}
};
private:
string msClassName;
};
/*etc.*/
Run Code Online (Sandbox Code Playgroud)
有没有办法以某种方式将此字符串转换为实际类型(类),以便BaseFactory不必知道所有可能的Derived类,并为每个类都有if()?我可以用这个字符串生成一个类吗?
我认为这可以通过Reflection在C#中完成.C++中有类似的东西吗?
I have the following class:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
Run Code Online (Sandbox Code Playgroud)
Compilation fails with the message:
实例成员'categoriesPerPage'不能用于'ReportView'类型
这是什么意思?
假设我想要init一个UIView带a String和a的子类Int.
如果我只是子类化,我将如何在Swift中执行此操作UIView?如果我只是创建一个自定义init()函数,但参数是一个字符串和一个Int,它告诉我"在从初始化程序返回之前不调用"super.init()".
如果我打电话super.init()告诉我必须使用指定的初始化程序.我应该在那里使用什么?框架版本?编码器版本?都?为什么?
我是一名试图理解C++的C程序员.许多教程使用片段演示对象实例化,例如:
Dog* sparky = new Dog();
Run Code Online (Sandbox Code Playgroud)
这暗示你以后会这样做:
delete sparky;
Run Code Online (Sandbox Code Playgroud)
这是有道理的.现在,在不需要动态内存分配的情况下,有没有理由使用上面的代替
Dog sparky;
Run Code Online (Sandbox Code Playgroud)
一旦sparky超出范围,让析构函数被调用?
谢谢!
我的同事一直在使用带有小写"f"的"new function()"来定义JavaScript中的新对象.它似乎在所有主流浏览器中运行良好,并且在隐藏私有变量方面似乎也相当有效.这是一个例子:
var someObj = new function () {
var inner = 'some value';
this.foo = 'blah';
this.get_inner = function () {
return inner;
};
this.set_inner = function (s) {
inner = s;
};
};
Run Code Online (Sandbox Code Playgroud)
一旦使用"this",它就成为someObj的公共财产.所以someObj.foo,someObj.get_inner()和someObj.set_inner()都是公开的.另外,set_inner()和get_inner()是特权方法,因此它们可以通过闭包访问"内部".
但是,我在任何地方都没有看到任何对此技术的引用.甚至Douglas Crockford的JSLint抱怨它:
- 怪异的建筑.删除'新'
我们在生产中使用这种技术,它似乎运作良好,但我有点担心它,因为它没有在任何地方记录.有谁知道这是否是一种有效的技术?
我的问题是:从其字符串名称实例化一个类,该名称描述了如何在拥有名称时实例化一个类.有没有办法在Java中做到这一点?我将拥有包名和类名,我需要能够创建具有该特定名称的对象.
instantiation ×10
java ×3
c++ ×2
object ×2
reflection ×2
swift ×2
.net ×1
arrays ×1
c# ×1
cocoa-touch ×1
factory ×1
function ×1
generics ×1
inheritance ×1
ios ×1
javascript ×1
list ×1
literals ×1
performance ×1
python ×1
string ×1
system.type ×1
uiview ×1