我有一些想要序列化(反序列化)的类。我不希望代码出现在每个类中,所以我想我会创建这样的子类
public class Swan extends Animal {}
Run Code Online (Sandbox Code Playgroud)
和这样的基类:
public abstract class Animal {
protected String name;
// ...
public void saveAnimal(String filename) {
//ObjectOutputStream, save name...
}
public static /*returntype*/ loadAnimal(String filename) {
//ObjectInputStream...
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我希望这个工作:
Swan s1 = new Swan("name");
s1.saveAnimal("/pathToSaveFile");
Swan s2 = (Swan)loadAnimal("/pathToSaveFile") OR
Swan s2 = loadAnimal("/pathToSaveFile")
Run Code Online (Sandbox Code Playgroud)
如果 Animal 是抽象的,我该怎么做?如果该方法如下所示:
public static <T extends Animal> T loadAnimal(String filename) {
//loadFromFile
}
Run Code Online (Sandbox Code Playgroud)
我无法返回new T(name) //parameter cannot be instantiated directly。我读了一些有关反射的内容,但无法获取泛型类型 T 的类。解决方法是将类型的类传递给构造函数,但 Animal 应该是抽象的。
我有两个类,我希望子类的每个对象都有一个名称,它作为参数传递给超类的构造函数.我该怎么做呢?
class base
{
public:
base(const char * name) {name = name;}
const char * getName() {return name;};
private:
const char * name;
};
class derived : public base
{
public:
derived(const char * name) : base(name) {}
};
Run Code Online (Sandbox Code Playgroud)
然而,
int main(int argc, char **argv)
{
derived d("test");
std::cout << d.getName();
}
Run Code Online (Sandbox Code Playgroud)
产生乱码作为控制台输出.