2015-09-07 6 views
0

См коды ниже:Java метод перегрузка конструкции с несколько матчем

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, NULL); может ссылаться на два других метода конструктора, есть ли способ, которым я могу указать, к какому из них он относится, вместо того, чтобы изменять подпись или «нуль»? спасибо

ответ

2

Несомненно, просто введите null в тип подписи!

new ExpandableTextView(context, (AttributeSet)null, (Runnable)null) 
+0

TIL вы можете использовать 'null'. –

+0

Ну, 'null' является подтипом всех ссылочных типов ... –

+1

@ILikeTau Из-за этого мы можем даже делать сумасшедшие вещи, такие как' ((Math) null) .max (1, 2); ' – Pshemo

0

Ваш код не должен работать, поскольку компилятор будет вызывать ошибку при упоминании двусмысленного метода. Поскольку Java всегда будет пытаться использовать наиболее подходящую версию метода, доступного (см. JLS §15.12.2). И null является допустимым значением для типов Context, AttributeSet и Runnable. Поэтому все 3 версии применимы.

+0

спасибо, что сделал мой вопрос более понятным –