我正在尝试将现有的类转换为使用泛型,并且在转换构造函数时陷入困境。
最初的类是POJO,其中包含在基于文本的控制台游戏中从一个房间移到另一个房间的逻辑。从字面上看,它是一个包含一些字符串触发器的类,这些触发器将触发该操作(例如,用户键入“向右行走”),一个描述以及一个指向新位置的指针。
该类的当前非通用版本如下所示:
public class Navigation implements Serializable {
private static final long serialVersionUID = 1L;
private String trigger;
private String description;
private Location target;
public Navigation() {
this("", "", new Location());
}
public Navigation(String trigger, String description, Location target) {
this.trigger = trigger;
this.description = description;
this.target = target;
}
// plus getters, setters, etc.
}
(Location
该类是另一个描述位置的POJO。这无关紧要。)
我想扩展Navigation
该类,以便能够处理非Location
s的目标。我认为最好的方法是将Navigation
类转换为使用泛型,因此我尝试了以下方法:
public class Navigation<T> implements Serializable {
private static final long serialVersionUID = 2L;
private String trigger;
private String description;
private T target;
public Navigation() {
this("", "", new T());
}
public Navigation(String trigger, String description, T target) {
this.trigger = trigger;
this.description = description;
this.target = target;
}
// plus getters, setters, etc.
}
但是,this("", "", new T());
由于T
无法实例化,因此无法在线编译。是否可以在这种情况下实例化泛型类型对象?
您基本上有两个选择:
1,需要一个实例
public Navigation(T t) {
this("", "", t);
}
2.需要一个类实例:
public Navigation(Class<T> c) {
this("", "", c.newInstance());
}
您可以使用工厂模式,但是最终您将面临同样的问题,但是只需将其推送到代码中的其他位置即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句