有一个很好的讨论泛型和他们在这个问题的幕后真正做了什么,所以我们都知道这Vector<int[]>是一个整数数组的向量,并且HashTable<String, Person>是一个表,其键是字符串和值Persons.然而,困扰我的是使用Class<>.
java类Class也应该采用模板名称,(或者我在eclipse中通过黄色下划线告诉我).我不明白我应该放在那里.Class对象的整个要点是当您没有完全拥有关于对象,反射等的信息时.为什么它让我指定Class对象将保持哪个类?我显然不知道,或者我不会使用该Class对象,我会使用具体的一个.
为什么Java中的泛型使用类而不是基本类型?
例如,这工作正常:
List<Integer> foo = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
但这是不允许的:
List<int> bar = new ArrayList<int>();
Run Code Online (Sandbox Code Playgroud) 好吧,这真的很难承认,但我现在确实有很强的诱惑力来继承std::vector.
我需要大约10个定制的矢量算法,我希望它们直接成为矢量的成员.但我自然也希望拥有剩下std::vector的界面.好吧,作为一个守法的公民,我的第一个想法是std::vector在MyVector课堂上有一个成员.但是我必须手动重新编写所有std :: vector的接口.打字太多了.接下来,我考虑了私有继承,所以我不会using std::vector::member在公共部分写一些方法而不是重新提取方法.实际上这也很乏味.
在这里,我确实认为我可以简单地从公开继承std::vector,但在文档中提供警告,不应该多态地使用此类.我认为大多数开发人员都有足够的能力去理解这不应该以多态方式使用.
我的决定绝对没有道理吗?如果是这样,为什么?你能提供一个替代方案,其他成员实际上是成员,但不会涉及重新输入所有vector的界面吗?我对此表示怀疑,但如果可以,我会很高兴.
此外,除了一些白痴可以写类似的事实
std::vector<int>* p = new MyVector
Run Code Online (Sandbox Code Playgroud)
使用MyVector 有任何其他现实危险吗?通过说现实,我放弃像想象一个带有指向矢量的指针的函数...
好吧,我已经陈述了我的情况.我犯罪了.现在由你来原谅我了不起:)
如何在Java中编写相应的内容?
// C++ Code
template< class T >
class SomeClass
{
private:
T data;
public:
SomeClass()
{
}
void set(T data_)
{
data = data_;
}
};
Run Code Online (Sandbox Code Playgroud) 我有一些本机C++代码,我正在使用SWIG转换为Java,以便我的Java应用程序可以使用它.特别是有一些函数返回std :: vector.这是我的界面文件的片段:
%include "std_vector.i"
namespace std {
%template(Vector) vector<double>;
%template(Matrix) vector<vector<double> >;
}
%include "std_string.i"
Run Code Online (Sandbox Code Playgroud)
std_string.i而std_vector.i被列入我的,我使用痛饮的构建.我的第一个惊喜是Java输出包含了SWIG的"自有"版本的Vector类(与使用相反java.util.Vector).我真正的问题是从这些函数返回的Vector似乎不起作用.例如,我无法使用get()(有时崩溃程序)或size()返回负值的函数来检索其内容.我知道Vectors包含数据,因为我编写了相同函数的'String'版本,它们只是遍历Vectors(回到本机C++代码中)并以逗号分隔String值返回内容.虽然这是一个有效的解决方法,但最终我希望这能够正常工作,因为我能够接收和操纵Vectors.任何帮助/提示将非常感激.
我有一个用C++定义的方法:
std::map<std::string, std::string> validate(
std::map<std::string, std::string> key,
std::map<std::string, std::string> value
);
Run Code Online (Sandbox Code Playgroud)
我想在Java中使用此方法.所以,我必须使用Swig编写一个包装器,通过它我可以将Java MapSTL 传递map给c ++方法.
请告诉我如何为swig定义.i文件以使其正常工作.