2010-05-12 1 views
3

в соответствии с заголовком. Я изо всех сил пытаюсь найти причину предупреждения «непроверенных или небезопасных операций» в некотором коде.Я не могу найти причину предупреждения «непроверенных или небезопасных операций» в Java

Если у меня есть следующий код, он компилирует без каких-либо предупреждений:

public void test() 
{ 
    Set<String> mySet = new HashSet<String>(); 
    Set<String> myNewSet = mySet; 
    //do stuff 
} 

Теперь, если я изменю, где Инд.Сброс приходит, в частности, в результате вызова метода, я получаю «непроверенный ядд ядд»предупреждение:

public void test() 
{ 
    Set<String> myNewSet = this.getSet(); 
    //do stuff 
} 

public Set getSet() 
{ 
    Set<String> set = new HashSet<String>(); 
    return set; 
} 

Я пытался и пытался разобраться, что проблема есть, и я полностью озадачен. Проблема заключается в том, использую ли я Sets или Lists. Почему набор, возвращенный методом getSet, будет отличаться от Set в первом примере?

Любая помощь будет принята с благодарностью, поскольку предупреждение не является концом света, это изгоняет меня! :(

С уважением

+0

Вы (случайно, без сомнения) использовали необработанный тип 'Set'; см. http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it – polygenelubricants

ответ

4

Вы должны объявить метод для возвращения параметризированный типа.

public Set<String> getSet() 
{ 
    Set<String> set = new HashSet<String>(); 
    return set; 
} 

Чтобы узнать больше о дженериков, проверьте Sun tutorial on the subject (PDF).

0

Вы забыли объявить о возвращении тип вашего вызова getSet().

У вас есть:

public Set getSet() { 

в то время как вы хотите вернуть Set<String> так:

public Set<String> getSet() { 
0

Ваш метод возвращает Set, не Set<String>, поэтому, когда вы назначаете Set<String> mySet = Set; Это неконтролируемый операция.

2

Решение изменить подпись метода из

public Set getSet() 

в

public Set<String> getSet() 

Вы пытаетесь присвоить сырой Set к Set<String>, который по своей сути небезопасно, поскольку первые могут содержать значения что последнее не может.

Вы также можете попробовать параметризировать метод, чтобы он работал с String, Integer или любым другим типом T.

1
public Set<String> getSet() // You need to change the signature to this. 
{ 
    Set<String> set = new HashSet<String>(); 
    return set; 
} 
Смежные вопросы