0

参考下面的代码:

public class ExpandableTextView extends TextView {

    public ExpandableTextView(Context context) {
        this(context, null, null);
    }

    public ExpandableTextView(Context context, AttributeSet attrs) {
        this(context, attrs, null);
    }

    public ExpandableTextView(Context context, AttributeSet attrs, Runnable runnable) {
        super(context, attrs);

        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ExpandableTextView);
        this.trimLength = typedArray.getInt(R.styleable.ExpandableTextView_trimLength, DEFAULT_TRIM_LENGTH);
        typedArray.recycle();

        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                trim = !trim;
                setText();
                requestFocusFromTouch();
            }
        });
    }

    public ExpandableTextView(Context context, AttributeSet attrs, Activity activity) {
        super(context, attrs);

        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ExpandableTextView);
        this.trimLength = typedArray.getInt(R.styleable.ExpandableTextView_trimLength, DEFAULT_TRIM_LENGTH);
        typedArray.recycle();

        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                trim = !trim;
                setText();
                requestFocusFromTouch();
            }
        });
    }
}

像这样的方法(上下文,空,空);可以引用其他两个构造函数方法,有什么方法可以指定它引用哪一个而不是更改签名或“null”?谢谢

4

2 回答 2

2

当然,只需将其null转换为签名类型!

    new ExpandableTextView(context, (AttributeSet)null, (Runnable)null)
于 2015-09-07T21:39:44.430 回答
0

你的代码不应该工作,因为编译器会抛出错误,提到模棱两可的方法。因为 Java 将始终尝试使用可用方法的最具体适用版本(请参阅 JLS §15.12.2)。并且null是 Context、AttributeSet 和 Runnable 类型的有效值。因此所有 3 个版本都适用。

于 2015-09-07T21:43:47.357 回答