问题
我正在尝试使用 Java 泛型来替换具有类似方法的类。我发现的所有示例都包含简单示例,但我不确定 Java 泛型是否打算以这种方式使用。
我有 2 个父类和 2 个具有几乎相同方法的子类。两个父类也派生自不同的类。最终,我希望能够使用一个代码块来创建和操作其中一个父类,然后是它的子类,而不需要大量的 switch 语句或其他具有重复代码的流控制。
这就是我的想法,尽管我还没有能够让它以这种方式工作,无论是语法,还是不是泛型的功能。
家长班
public class FooParent
{
private FooChild fooChild;
public FooChild getChild()
{
return fooChild;
}
}
public class BarParent
{
private BarChild barChild;
public BarChild getChild()
{
return barChild;
}
}
子班
public class FooChild
{
public void print()
{
System.out.println("I'm a foo child");
}
}
public class BarChild
{
public void print()
{
System.out.println("I'm a bar child");
}
}
泛型类
public class GenericParent<T>
{
private T self;
public GenericParent(T self)
{
this.self = self;
}
public GenericChild getChild()
{
return new GenericChild(self.getChild());
}
}
public class GenericChild<T>
{
private T self;
public GenericChild(T self)
{
this.self = self;
}
public void print()
{
self.print();
}
}
我想如何使用它们
public static void main(String args[])
{
GenericParent parent;
// Only the initialization of the parent variable needs specialized code
switch(args[0])
{
case "foo":
parent = new GenericParent(new FooParent());
break;
case "bar":
parent = new GenericParent(new BarParent());
break;
}
// From here on out, it's all generic
parent.getChild().print();
}
用法和期望的输出
java genericExample foo
> I'm a foo child
java genericExample bar
> I'm a bar child
最后的问题
也许“孩子”和“父母”用词不当,因为我知道它们实际上并没有被继承,但最重要的是,一个类用某些方法返回它的“孩子”。所以这是一个问题的很多代码,实际上可能无法通过这种方式解决,但希望你能回答我这个问题:
- 这是Java泛型可以完成的事情吗?
- 如果没有,Java中是否有解决此问题的方法?
谢谢!
编辑
我无法编辑我的“Foo”和“Bar”课程。我的最终问题是:我可以在不使用公共父类的情况下将任一类的一个实例存储在单个变量中吗?