我有一个我想与任何一个String
或int
值来实例化一个类,我定义了相应的实例变量value
为通用型T
:是否可以使用特定类型的值初始化泛型变量?
public class MathValue<T extends Object> {
private boolean isOperand, isOperator;
// a generic-typed instance variable:
private T value;
// constructor:
public MathValue(int operand) {
// compile-error -- "Incompatible types: required T, found Integer"
this.value = new Integer(operand);
this.isOperand = true;
this.isOperator = false;
}
// constructor:
public MathValue(String operator) {
// compile-error -- "Incompatible types: required T, found String"
this.value = operand;
this.isOperand = false;
this.isOperator = true;
}
}
我能非常好有一个单一的构造函数,具有T
类型的形式参数,但我想强制类的实例化,使用String
或int
参数:
public class MathValue<T extends Object> {
private boolean isOperand, isOperator;
// a generic-typed instance variable:
private T value;
// it totally works, but does not enforce specific-typed instantiation:
public MathValue(T operandOrOperator) {
this.value = operandOrOperator;
if (operandOrOperator instanceof Integer) {
this.isOperand = true;
this.isOperator = false;
} else if (operandOrOperator instanceof String) {
this.isOperand = false;
this.isOperator = true;
}
}
}
所以尽管想使一个通用的类型类“不那么通用”的逻辑错误,是否有可能来实例化一个普通变量与特定类型的值?
'T延伸TheSpecificTypesMustUnifyHere'。 – user2864740
我不认为这是可能的,因为'String'和'Integer'在不同的类型层次结构中,只有普通的超类型是'Object'。但是你可以做的是,如果'T'不是它们中的任何一个的实例,则从构造函数中抛出一个未经检查的异常。 –
啊,谢谢@RohitJain,好主意! –