2014-11-26 3 views
0

Я получаю предупреждения типа raw в моей программе. Я использовал @SuppressWarnings («rawtypes»), но удобнее, если есть какой-то другой метод для решения этой проблемы. Скажите, кто-нибудь мне поможет У меня есть это предупреждение в следующем код NamingEnumeration части:Как предотвратить предупреждения rawtype в java-программе?

try { 

     String[] attrIDs = { Constants.UNIQUEMEMBER }; 
     Attributes answer = iniDirContext.getAttributes("cn=" + groupName 
       + "," + Constants.PROJECT_DN, attrIDs); 
     NamingEnumeration ae = answer.getAll(); 
     Attribute attr = (Attribute) ae.next(); 
     for (NamingEnumeration e = attr.getAll(); e.hasMore();) { 
      String str = e.next().toString(); 
      if (getAppUserRole(str)) 
       count = count + 1; 

     } 
    } catch (Exception e1) { 
     e1.printStackTrace(); 
    } 
+0

Какая линия имеет предупреждение? –

+1

Предупреждения типа Rawtype обычно возникают из-за неявного объявления ваших общих типов в классе, который их использует. Например, объявление 'List example = new ArrayList();' on' ArrayList ' – Rogue

ответ

3

Использовать как list1NamingEnumeration<NameClassPair> вместо необработанного типа. То же самое касается results1 - используйте NamingEnumeration<SearchResult>. Таким образом, вам даже не нужно бросать.

Сравните свой код с этим:

ArrayList list = new ArrayList(); //raw typed 
list.add("entry"); //add a string 
String s = (String)list.get(0); //but return type is Object, because list in raw typed 

ArrayList<String> list2 = new ArrayList<String>(); //strong typed 
list2.add("entry"); //add a string 
String s2 = list2.get(0); //return type is String, because list2 is strong typed 

Весь код становится:

SearchControls controls = new SearchControls(); 
controls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
NamingEnumeration<NameClassPair> list1 = iniDirContext.list(Constants.ORG_SEARCH_BASE); 
while (list1.hasMore()) { 
    String base = list1.next().getName() + "," + Constants.ORG_SEARCH_BASE; //no cast needed, list1 is strong typed 
    SearchControls searchControls = new SearchControls(); 
    searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
    String filter = "(&(objectclass=groupOfUniqueNames))"; 
    NamingEnumeration<SearchResult> results1 = iniDirContext.search(base, filter, searchControls); 
    while (results1.hasMore()) { 
     SearchResult searchResult = results1.next(); 
     Attributes attributes = searchResult.getAttributes(); 
     Attribute cn = attributes.get(Constants.CN); 
     Attribute address = attributes.get(Constants.POSTAL_ADDRESS); 
     if (cn.get().equals(oranizationData.getOrgName()) && address.equals(oranizationData.getOrgAddress())) { 
      return false; 
     } 
    } 
} 
+0

есть ли какой-либо общий метод, который может быть применен для всех предупреждений rawtype, включая List – Chinnu

+0

. Вы никогда не должны сырой тип ваших переменных, всегда сильный тип. – stealthjong

0

Использование <Class_Name>, скорее всего, на NameClassPair. Что-то вроде NameClassPair<String, String>.

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