Не можете ли вы установить цвет возвращаемого компонента TabBarIcon? Взгляните на tintColor в официальных документах: https://reactnavigation.org/docs/en/tab-based-navigation.html
export default createBottomTabNavigator(
{
Home: HomeScreen,
Settings: SettingsScreen,
},
{
defaultNavigationOptions: ({ navigation }) => ({
tabBarIcon: ({ focused, horizontal, tintColor }) => {
return ;
},
}),
tabBarOptions: {
activeTintColor: 'tomato',
inactiveTintColor: 'gray',
},
}
);
Поскольку универсальная информация о типе стирается во времени выполнения, стандартный способ бросить к универсальному типу с a Class
объект:
public static <T> T staticCast(Object arg, Class<T> clazz) {
if (arg == null) return null;
if (!clazz.isInstance(arg))
return null;
T result = clazz.cast(arg);
return result;
}
Затем назовите его как это:
a = Main.staticCast("B", MyClass.class);
Вы имеете в виду как Class<T>.cast(Object obj)
?
Что-то как:
Class.forName("YourClass").cast(obj);
Должен сделать в значительной степени, что Вы хотите.
Знайте, что это является довольно вонючим, хотя и, вероятно, знак плохого дизайна.
Вы не можете сделать то, что Вы хотите..., по крайней мере, не этот путь. Компилятор удалил всю информацию, таким образом, Вы волнуете с (T), являющимся Объектом в броске - и это работает.
Проблема состоит в том, что позже Вы делаете MyClass = (Строка) объект; и это не позволяется.
Вы обошли проверку компиляторов и заставили ее перестать работать во времени выполнения.
Таким образом, что точно Вы пытаетесь сделать? Если Вы говорите нам, почему Вы хотите сделать это, мы можем, вероятно, сказать Вам Java способ сделать его.
Учитывая Ваш комментарий Вы могли бы попробовать что-то как:
public class Main
{
public static void main(String[] args)
{
String a;
MyClass b;
a = staticCast(new String("B"), String.class);
b = staticCast(new String("B"), MyClass.class);
System.out.println(a);
}
public static class MyClass
{
}
public static <T> T staticCast(Object arg, final Class clazz)
{
// edit - oops forgot to deal with null...
if(arg == null)
{
return (null);
}
// the call to Class.cast, as mmeyer did, might be better... probably is better...
if(arg.getClass() != clazz)
{
// Given your answer to Ben S...
return (null);
// throw new ClassCastException("cannot cast a " + arg.getClass() + " to a " + clazz);
}
return ((T)arg);
}
}
Не принимайте дженерики Java за шаблоны C++. Там будет только одним staticCast методом, которым это называют со стиранием другого типа, не один для каждого T.
Не используя Дженериков вообще, я записал бы этому этот путь:
public static void main(String[] args) {
MyClass a, b;
a = (MyClass)Main.staticCast(new String("B"), MyClass.class);
}
public static class MyClass {
}
public static staticCast(Object arg, Class class) {
if (arg != null && class.isAssignableFrom(arg))
return arg;
return null;
}
Или кража из другого ответа, использование дженериков:
public static <T> T staticCast(Object arg, Class<T> class) {
if (arg != null && class.isAssignableFrom(arg))
{
T result = class.cast(arg);
return result;
}
return null;
}
Я соглашаюсь с Ben, однако, я предпочитаю следующую нотацию:
MyClass.class.cast(obj);