问题描述
使用继承:
public abstract class Parent<T> {
public abstract void display(T t);
}
public class ChildString extends Parent<String> {
@Override
public void display(String t) {
// Do something here...
}
}
public class ChildInteger extends Parent<Integer> {
@Override
public void display(Integer t) {
// Do something here...
}
}
public class ChildDouble extends Parent<Double> {
@Override
public void display(Double t) {
// Do something here...
}
}
并访问子类,而不是直接访问父类。
这里再举一个例子:
public class GenericType {
public void display(Object t) {
String msg;
if(t instanceof String) {
msg = "String";
} else if (t instanceof Integer) {
msg = "Integer";
} else if (t instanceof Double) {
msg = "Double";
} else {
msg = "Another Object";
}
System.out.println(msg);
}
}
public class SpecificGeneric {
public static void main(String[] args) {
GenericType basicType = new GenericType();
basicType.display(new String());
basicType.display(new Integer(1));
basicType.display(new Double(0.1));
}
}
解决方法
说,我有如下通用类型
public class GenericType<T> {
private T someVar;
public void setVar(T var) { this.someVar = var; }
//Rest of the code
}
我想让它只接受特定的类型(字符串/整数/双精度)。我知道有界通配符,但在这里对我没有帮助。在setVar()中,instanceof
如果类型不是Integer
/ String等,我可以检查并引发异常。这是最好的方法吗?
在对此类型进行操作时,我遇到同样的问题。根据类型,我想执行不同的操作。继承和有界通配符似乎通常是解决此类问题的方法,但它们是原始包装器。