2015-03-04 3 views
-1

В классе, инициализированном как Карта, есть статическая карта, но это не реализация интерфейса Map, такого как HashMap или TreeMap в этом классе. Теперь мне нужно создать единичный тестовый пример, где мне нужно использовать эту карту в моем проекте. но когда я пытаюсь создать реализацию этого в другом классе, я каждый раз обнаруживал нулевой объект. Я думаю, что мне не хватает основной концепции Java-программирования. Пожалуйста, помогите мне в решении этой проблемы.Как мы можем инициализировать статическую карту из внешнего класса?

Вот класс спинет с использованием статической карты:

public static Map<Integer, someSpace> someSpaceMap = null; 
public static boolean loadMyCache(){ 

    try { 
     someSpaceMap = cacheService.getsomeSpaces(); 

    } catch (Throwable e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 
+0

Я думаю, что есть опечатка с именем атрибутов. –

+0

adspaceMap не определен, post getsome Определение пространств –

ответ

1

попробовать этот

public static Map<Integer, someSpace> someSpaceMap = null; 
static { 
    try { 
     someSpaceMap = CacheService.getsomeSpaces(); 
    } catch (Throwable e) { // Discouraged 
     e.printStackTrace(); 
    } 
} 
0

Спасибо всем, я нашел решение этой .I может инициализировать это вне класса, используя любую реализацию карты. Просто имейте в виду, если вы используете версию java ниже 5, убедитесь, что примитивы должны быть заменены на объект класса Wrapper, потому что подпись интерфейса интерфейса такова: общественный интерфейс Карта < K, V> .Java 1.4 не поддерживает авто- заниматься боксом.

0

Пара вещей, во-первых, исправьте соглашения об именах, чтобы выровнять их с Java standard.

public static Map<Integer, someSpace> someSpaceMap = null; 

someSpace должен быть SomeSpace, как это имя класса.

Поскольку услуга кэша не определена, я предполагаю, что св статический вызов, вам необходимо исправить дело по имени методы слишком

someSpaceMap = CacheService.getSomeSpaces(); 

Далее, вы можете инициализировать карту со значениями когда вы объявляете его, например, так:

import java.util.HashMap; 
import java.util.Map; 

public class TestRunner { 

    public static Map<Integer, SomeSpace> someSpaceMap = new HashMap<Integer, SomeSpace>(){{ 
     put(1, new SomeSpace()); 
     put(2, new SomeSpace()); 
     put(3, new SomeSpace()); 
    }}; 

    public static void main(String[] args) { 
     for(Map.Entry e : someSpaceMap.entrySet()){ 
      System.out.println("key " + e.getKey() + " value " + e.getValue()); 
     } 
    } 
} 

class SomeSpace {} 

Образец продукции

key 1 value [email protected] 
key 2 value [email protected] 
key 3 value [email protected] 
+0

Пожалуйста, не рекомендуется использовать блоки инициализации экземпляра. См. Http://stackoverflow.com/q/671644/95725 – NamshubWriter

+0

@NamshubWriter благодарит за то, что это означает, что равенство TIL является проблемой при создании экземпляров таким образом;) В другом примечании, похоже, есть много способов сделать это: http : //stackoverflow.com/questions/507602/how-can-i-initialize-a-static-map – Jimmy