Cel*_*Cel 26 java generics android types charsequence
是否可以通用参数化接受EAEER ClassA或InterfaceB的方法?
由于|不编译 伪代码
public <T extends Number | CharSequence> void orDoer(T someData){ // ... }
Run Code Online (Sandbox Code Playgroud)
即不是写多个方法签名,我希望这个方法接受Number或CharSequence作为参数
应该使用Number或CharSequence参数传递
orDoer(new Integer(6));
int somePrimitive = 4;
orDoer(somePrimitive);
orDoer("a string of chars");
Run Code Online (Sandbox Code Playgroud)
Gui*_*ume 18
如果你真的想这样做,你需要将自己接受的类包装在自己的自定义类中.在您的示例中,可能类似于:
public class OrDoerElement {
private final Number numberValue;
private final CharSequence charSequenceValue;
private OrDoerElement(Number number, CharSequence charSequence) {
this.numberValue = number;
this.charSequenceValue = charSequence;
}
public static OrDoerElement fromCharSequence(CharSequence value) {
return new OrDoerElement(null, value);
}
public static OrDoerElement fromNumber(Number value) {
return new OrDoerElement(value, null);
}
}
Run Code Online (Sandbox Code Playgroud)
你的orDoer方法变成:
public void orDoer(OrDoerElement someData) { .... }
Run Code Online (Sandbox Code Playgroud)
然后你可以使用以下任一方法构建其中一个并在你的方法中使用:
orDoer(OrDoerElement.fromCharSequence("a string of chars"));
orDoer(OrDoerElement.fromNumber(new Integer(6)));
Run Code Online (Sandbox Code Playgroud)
但老实说,这听起来有点过于复杂,太多工作只是为了能够调用具有不同参数类型的方法.您确定使用两种方法无法实现相同的目标,而第三种方法是通用逻辑吗?