2013-09-03 5 views
0

У меня проблема, которую описывает мой заголовок. У меня есть внешний класс под названием GAINEntities с внутренним классом в нем, который называется Entities. Моя цель - ссылаться на атрибуты внутреннего класса через объекты внешнего класса. У меня есть функция readGainEntities (String inputUrl), которая возвращает вектор. Таким образом, в моем методе я называю метод readGainEntities и его содержание в новый векторСсылочные атрибуты внутреннего класса Java через внешний объект класса

Пример кода:

protected static Vector<LinkedHashTreeMap> getGainEntities(String inputUrl) { 

    URL url = null; 
    try { 
     url = new URL(inputUrl); 

    } catch (MalformedURLException e2) { 
     // TODO Auto-generated catch block 
     e2.printStackTrace(); 
    } 
    URLConnection yc = null; 
    try { 
     yc = url.openConnection(); 
    } catch (IOException e2) { 
     // TODO Auto-generated catch block 
     e2.printStackTrace(); 
    } 
    String userpass = "" + ":" + ""; 
    String basicAuth = "Basic " 
      + new String(new Base64().encode(userpass.getBytes())); 
    yc.setRequestProperty("Authorization", basicAuth); 
    BufferedReader in = null; 
    try { 
     in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    Gson gson = new Gson(); 
    List<LinkedHashTreeMap> items = null; 
    try { 
     items = gson.fromJson(in.readLine(), 
       new TypeToken<List<LinkedHashTreeMap>>() { 
       }.getType()); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    Vector<LinkedHashTreeMap> sessions = new Vector<LinkedHashTreeMap>(); 
    for (int i = 0; i < items.size(); i++) { 
     sessions.add(items.get(i)); 
    } 

    return sessions; 
} 



public static Vector<GAINEntities> readGainentities(String inputUrl) { 
    Vector<GAINEntities> exp = new Vector<GAINEntities>(); 
    Vector<LinkedHashTreeMap> sessions = getGainEntities(inputUrl); 
    Iterator it = sessions.iterator(); 
    while (it.hasNext()) { 
     LinkedHashTreeMap next = (LinkedHashTreeMap) it.next(); 
     GAINEntities input = new GAINEntities(); 
     input.setObjectID((String) next.get("objectId")); 
     input.setSubobjectID((String) next.get("subobjectId")); 

     LinkedHashTreeMap<String, String> lhmt = (LinkedHashTreeMap<String, String>) next 
       .get("attributes"); 

     data.GAINEntities.Attributes atts = input.new Attributes(); 
     atts.setAttributeStart(Double.parseDouble(String.valueOf(lhmt 
       .get("start")))); 
     atts.setAttributeEnd(Double.parseDouble(String.valueOf(lhmt 
       .get("end")))); 

     input.setAttributes(atts); 
     input.setAccountID((String) next.get("accountId")); 
     input.setID((String) next.get("_id")); 
     input.setV(Double.parseDouble(String.valueOf(next.get("__v")))); 
     ArrayList<LinkedHashTreeMap<String, String>> al = (ArrayList<LinkedHashTreeMap<String, String>>) next 
       .get("entities"); 
     ArrayList<Entities> ents = new ArrayList<Entities>(); 

     for (int i = 0; i < al.size(); i++) { 
      ents.add(input.new Entities(al.get(i).get("ntype"), al.get(i) 
        .get("source"), al.get(i).get("lod"), al.get(i).get(
        "type"), al.get(i).get("label"), Double 
        .parseDouble(String 
          .valueOf(al.get(i).get("confidence"))), 
        Double.parseDouble(String.valueOf(al.get(i).get(
          "relevance"))))); 
     } 
     input.setEntities(ents); 

     exp.add(input); 
     // System.out.println(input); 
     // System.out.println(input); 
    } 

    return exp; 
} 

Тогда в моем Перевести метод:

public static String translateGAINEntities(String url) { 
    LogicFactory.initialize(); 
    Vector<GAINEntities> exp = readGainEntities.readGainentities(url); 
for (int i = 0; i < exp.size(); i++) { 
     LogicFactory.initialize(); 
     GAINEntities gexp = exp.get(i); 
System.out.println("HEREEE \t" + gexp.getEntities()); <-- returns empty. 

Итак, есть ли что-то неправильно с моим кодом как im все еще не уверены, как ссылаться на атрибуты Entities через объекты GAINEntities, которые возвращают readGainEntities

+0

Sidenote: '' '' '' '' '' '' обозначены как «устаревшая структура данных». – Fildor

+0

Согласен, но в настоящее время я работаю над кодом партнера, я ничего не могу с этим поделать. –

ответ

1

Как правило, вы можете ссылаться на атрибут Утес о Inner класса вне Outer класса только тогда, когда у вас есть объект в Outer класса:

new Outer().new Inner().doStuff(); 

при условии, что метод doStuff() является общедоступным.

Если Inner класс static, то вы можете ссылаться на него как:

new Outer.Inner().doStuff(); 

В вашем примере вы не показывают классы, участвующих.

+0

Я решил пойти на другой класс, заменив внутренний, спасибо в любом случае. –

Смежные вопросы