У меня также была проблема, потому что я был в дочернем фрагменте. Я мог бы использовать:
supportFragmentManager.fragments.forEach {
it.childFragmentManager.fragments.forEach { fragment ->
if (fragment is HomeFragment) {
//do something
}
}
, но один сотрудник оптимизировал его с помощью:
if( findNavController(R.id.nav_host_fragment).currentDestination?.id == R.id.homeFragment) {
// do something
}
Не нужно кастовать. LinkedList
реализует List
, поэтому вам не нужно выполнять приведение здесь.
Даже если вы хотите преобразовать его в список List
из Object
s, вы можете сделать это с помощью универсальных шаблонов, как в следующем коде:
LinkedList<E> ll = someList;
List<? extends Object> l = ll; // perfectly fine, no casting needed
Теперь, после вашего редактирования, я понимаю, что вы пытаетесь сделать, и это невозможно без создания нового List
вот так:
LinkedList<E> ll = someList;
List<Object> l = new LinkedList<Object>();
for (E e : ll) {
l.add((Object) e); // need to cast each object specifically
}
и я объясню, почему иначе это невозможно. Подумайте об этом:
LinkedList<String> ll = new LinkedList<String>();
List<Object> l = ll; // ERROR, but suppose this was possible
l.add((Object) new Integer(5)); // now what? How is an int a String???
Для получения дополнительной информации см. Учебник по универсальным шаблонам Sun Java . Надеюсь, это прояснится.
> public List<Object> getList()
Почему вы возвращаете List
LinkedList<Customer> theList = new LinkedList<Customer>();
public List getList() {
return theList;
}
Преобразование между списками с разными универсальными типами сложно и здесь кажется ненужным.
Конечно, вы должны возвращать тип List <Заказчик> ...
Вы должны вернуть List >
из вашего метода. Интуитивно getList ()
возвращает список, так что вызывающий может получить элементы внутри. List >
(который эквивалентен List Extends Object>
) допускает эту функциональность. Однако вы не сможете ничего добавить в него через возвращенный список, потому что это не будет типобезопасным; но я не думаю, что это то, что вам нужно.
public List<?> getList()
{
return theList;
}
LinkedList implements List, so you can implement
List< String > list1 = new LinkedList< String >();
Or do you want to cast from LinkedList< String > to List< int >? in this case you have to pick every single element and convert it to an integer.
List is an interface, LinkedList is a concrete implementation of that interface. Much of the time an implicit cast will work, assign a LinkedList to a List, or pass it to a function expecting a List and it should just `work'.
An explicit cast can also be done if necessary.
//This is valid
List<Customer> myList = new LinkedList<Customer>();
//Also Valid
List<Customer> myList = (List<Customer>) new LinkedList<Customer>();