powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / static class
9 сообщений из 9, страница 1 из 1
static class
    #37872894
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Нужно создать класс - хранитель статических данных(массив)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
public class filterList {
	static private ArrayList<filterItem> mList = //new ArrayList<filterItem>();
			(ArrayList<filterItem>) Arrays.asList(
					new filterItem(R.id.call_out, "is_show_call_out", R.drawable.call_out_connected, R.drawable.call_out_disabled),
					new filterItem(R.id.call_in, "is_show_call_in", R.drawable.call_in_connected, R.drawable.call_in_disabled),
                                        ........)
				);
	
	static public int size()	{
		return	mList.size();
	}
	
	static public filterItem get(int index)	{
		return	mList.get(index);
	}
	
	static public filterItem get(String name)	{
		for(int i=0; i<mList.size(); i++)	
			if (mList.get(i).key.equals(name))	{
				return	mList.get(i);
			}
		return	null;
	}
	
	private	filterList()	{
		// set that class do not have constructor: this is static class
	}
}


Данная реализация вызывает exception -
W/System.err(8275): java.lang.ExceptionInInitializerError

Реализация
Код: java
1.
2.
3.
4.
5.
	static private ArrayList<filterItem> mList = new ArrayList<filterItem>();
        {
            mList.add( ... )
            ....
        }



Ошибок не вызывает, но mList.size()==0 ?
Помогите.

С Уважением, Александр
...
Рейтинг: 0 / 0
static class
    #37872902
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам себе отвечаю:
Код: java
1.
2.
3.
4.
5.
6.
7.
	static private ArrayList<filterItem> mList = //new ArrayList<filterItem>();
			new ArrayList<filterItem>(
					java.util.Arrays.<filterItem>asList(
					new filterItem(R.id.call_out, "is_show_call_out", R.drawable.call_out_connected, R.drawable.call_out_disabled),
					.........
							)
					);


Работает.
Вопрос почему не работает через инициализацию в {} ??
...
Рейтинг: 0 / 0
static class
    #37872915
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы понимать ошибку надо читать весь stacktrace, а не только окончательно сообщение.
Вероятно Arrays.asList возвращает не ArrayList, а другую реализацию.
Зачем вам поле конкретного типа ArrayList, если можно использовать общий тип List и не зависеть от реализации.
В реализации с безымянным конструктором вы забыли указать ключевое слово static. Поэтом ваш блок инициализации оказался не статическим и срабатывает только при создании экземпляра. Этот способ более или менее нормальный.

Есть ещё финт с двумя скобками, но со своими побочными эффектами.

Код: java
1.
2.
3.
4.
5.
6.
new ArrayList(){{
  add(value1);
  add(value2);
  add(value3);
  add(value4);
}}
...
Рейтинг: 0 / 0
static class
    #37872918
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LisichkinСам себе отвечаю:
Код: java
1.
2.
3.
4.
5.
6.
7.
	static private ArrayList<filterItem> mList = //new ArrayList<filterItem>();
			new ArrayList<filterItem>(
					java.util.Arrays.<filterItem>asList(
					new filterItem(R.id.call_out, "is_show_call_out", R.drawable.call_out_connected, R.drawable.call_out_disabled),
					.........
							)
					);


Работает.
Вопрос почему не работает через инициализацию в {} ??

А вот так будет ещё проще
Код: java
1.
2.
3.
static private List<filterItem> mList =  java.util.Arrays.<filterItem>asList(
					new filterItem(R.id.call_out, "is_show_call_out", R.drawable.call_out_connected, drawable.call_out_disabled),
					.........							));
...
Рейтинг: 0 / 0
static class
    #37872923
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В гуаве, вроде, ещё полезные заготовки есть:
http://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained
...
Рейтинг: 0 / 0
static class
    #37872925
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соглашение об именовании у вас специально своё собственное, а не общепринятое? Это ещё небось и андроид?
...
Рейтинг: 0 / 0
static class
    #37872944
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
Использовал предложение Blazkowicz
Код: java
1.
2.
3.
4.
static private List<filterItem> mList =  java.util.Arrays.<filterItem>asList(
					new filterItem(R.id.call_out, "is_show_call_out", R.drawable.call_out_connected, drawable.call_out_disabled),
					.........			
				);



Да, это андроид.
P.S. А вариант с двумя скобками я еще раньше пробовал - не получилось скомпилировать - то ли я не умею "готовить", то ли в android java это нельзя ...
...
Рейтинг: 0 / 0
static class
    #37873272
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lisichkin,

В инициализации инициализатор должен быть статическим:
Код: sql
1.
2.
3.
4.
5.
static private ArrayList<filterItem> mList = new ArrayList<filterItem>();
static { //!!!!
  mList.add( ... )
  ....
}



Без статика инициализатор вызывается при создании экземпляра класса, как часть конструктора.
...
Рейтинг: 0 / 0
static class
    #37873296
Miha_S7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЕсть ещё финт с двумя скобками, но со своими побочными эффектами.

Код: java
1.
2.
3.
4.
5.
6.
new ArrayList(){{
  add(value1);
  add(value2);
  add(value3);
  add(value4);
}}


ага, однажды наткнулся. Может есть ещё какие-то побочные эффекты, помимо этого?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import java.util.ArrayList;
import java.util.List;

public class Test2 {

    public static void main(String[] args) {

        List<Integer> l = new ArrayList<Integer>() { // анонимный класс
            { // конструктор по-умолчанию
                add(1);
                add(2);
            }
        };
        
        // на выходе не экземпляр ArrayList а его анонимный наследник
        
        System.out.println(l.getClass());
        
    }
    
}
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / static class
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]