所以这就是情况。我正在使用Java扩展一个类,我需要提供3个构造函数,分别包含1,2和3个参数。
public class MessageButton extends ImageButton {
private String number;
public MessageButton(Context context) {
super(context);
}
public MessageButton(Context context, AttributeSet attrs) {
super(context, attrs);
if( attrs.getAttributeValue("uk.co.gsteinert.ssbb", "number") != null ) {
this.number = attrs.getAttributeValue("uk.co.gsteinert.ssbb", "number");
}
}
public MessageButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
if( attrs.getAttributeValue("uk.co.gsteinert.ssbb", "number") != null ) {
this.number = attrs.getAttributeValue("uk.co.gsteinert.ssbb", "number");
}
}
}
显然那里有一些重复(在最后两个构造函数中),我想减少它。
我看到两个选项:
所以我看待它的方式,无论是我必须复制代码(函数调用)还是对超类(默认值)做出假设。我知道这些都不太理想,但哪个是更大的邪恶?
或者我错过了什么?
由于
答案 0 :(得分:0)
您可以使用this
public MyClass(String value) {
....
}
public MyClass() {
this(defaultValue);
}
答案 1 :(得分:0)
public class MessageButton extends ImageButton {
private String number;
public MessageButton(Context context) {
this(context,null,0);
}
public MessageButton(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MessageButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
if(attrs!=null){
if( attrs.getAttributeValue("uk.co.gsteinert.ssbb", "number") != null ) {
this.number = attrs.getAttributeValue("uk.co.gsteinert.ssbb", "number");
}
}}
}
答案 2 :(得分:0)
正如您所提到的,我将对所有构造函数使用this()并检查在父类中使用哪些默认值并提供那些而不是null(在此示例中使用)。您正在将此类用于自定义代码,因此您应该知道默认值是什么值。
public class MessageButton extends ImageButton {
private String number;
public MessageButton(Context context) {
this(context, null);
}
public MessageButton(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MessageButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
if (attrs.getAttributeValue("uk.co.gsteinert.ssbb", "number") != null) {
this.number = attrs.getAttributeValue("uk.co.gsteinert.ssbb", "number");
}
}
}