[英]Java Generic Classes, how to define constructor for possible Parameter types
我正在尝试定义一个可用于泛型类型的Java类,但我想为可能的参数类型(如Character)或我可以手动定义的对象类型定义构造函数。
我试图创建的类称为:
public class Repeated<T> implements Pict {
private T[][] elements;
private double scale;
public Repeated(T[][] elems) {
elements = elems;
}
}
所以我想添加一个构造函数来添加一个字符数组,并且如果只有T是Type字符则执行特定的操作。 可能吗? 或者我应该将其设为接口,然后再实现它?
你应该能够做到这一点:
public Repeated(T[][] elems) {
elements = elems;
boolean isCharacterArrayArray = false;
if (elems != null) {
for (T[] elt : elems) {
if (elt != null && elt.length > 0) {
isCharacterArrayArray = elt[0] instanceof Character;
break;
}
}
}
if (isCharacterArrayArray) {
// received a Character[][]
}
}
但是,由于类型擦除,我认为你不能区分这些调用:
new Repeated((Character[][]) null);
new Repeated((Integer[][]) null);
没有传递某种显式类参数。
编辑使用类参数,它变得更加简单:
public Repeated(T[][] elems, Class<T> cls) {
elements = elems;
if (cls.equals(Character.class)) {
// passed a Character[][]
}
}
所以我想添加一个构造函数来添加一个字符数组,并且如果只有T是Type字符则执行特定的操作
听起来像多态的好例子:
public class RepeatedChars extends Repeated<Character> {
public RepeatedChars(Character[][] chars) {
super(chars);
//do special stuff
}
//other character-specific logic if applicable
}
您甚至可以将此类隐藏为实现细节:
public class Repeated<T> implements Pict {
...
private static class RepeatedChars extends Repeated<Character> {
//see above
}
public static Repeated<Character> makeForChars(Character[][] chars) {
return new RepeatedChars(chars);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.