Не Универсальные Версии Универсальных классов и интерфейсов

Принятое решение не работало для меня на pre-Lollipop, но я нашел, что это решение подходит для всех API, и, кроме того, оно не использует устаревший код:

// fixes pre-Lollipop progressBar indeterminateDrawable tinting
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

    Drawable wrapDrawable = DrawableCompat.wrap(mProgressBar.getIndeterminateDrawable());
    DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
    mProgressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
} else {
    mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(getContext(), android.R.color.holo_green_light), PorterDuff.Mode.SRC_IN);
}

Удачного кодирования!

9
задан Jack Ryan 17 June 2009 в 08:56
поделиться

2 ответа

Вам нужно либо просто использовать объект в объявлении словаря (все это личное, и вы можете убедиться, что вы никогда не ошибетесь) что-то в этом роде) или объявить неуниверсальный интерфейс ICanCreate , который расширяется ICanCreate .

В основном вам нужно отношение типов, которое не может быть выражено на C # - и всякий раз, когда это происходит, вы получаете немного неприятное решение, но похоже, что вы можете изолировать уродство здесь (т.е. оставить его в пределах одного класса).

11
ответ дан 4 December 2019 в 14:30
поделиться

Интересно, что эта проблема решена в C # 4.0:

public interface ICanCreate<out T> // covariant
{
    T NewObject();
}

public class Factory
{
    private Dictionary<Type, ICanCreate<object>> mappings = new Dictionary<Type, ICanCreate<object>>();

    public void RegisterCreator<T>(ICanCreate<T> creator) where T:class
    {            
      mappings[typeof(T)] = creator;
    }

    public T Create<T>()
    {            
      ICanCreate<object> creator = mappings[typeof(T)];
      return (T) creator.NewObject(); // I do not think you can get rid of this cast
    }
}
3
ответ дан 4 December 2019 в 14:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: