3

タイトルのとおり、一部のコードで「チェックされていない、または安全でない操作」の警告の原因を見つけるのに苦労しています。

次のコードがある場合、警告なしでコンパイルされます。

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

ここで、mySetの取得元を変更すると、特にメソッド呼び出しの結果として、「チェックされていないyaddayadda」という警告が表示されます。

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

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

私は問題が何であるかを解明しようと試みましたが、私は完全に困惑しています。この問題は、セットを使用するかリストを使用するかに関係なく存在します。getSetメソッドによって返されるSetが、最初の例のSetと異なるのはなぜですか?

警告は世界の終わりではありませんが、それは私を悩ませているので、どんな助けでも大歓迎です!:(

よろしく

4

5 に答える 5

4

パラメータ化された型を返すには、メソッドを宣言する必要があります。

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

Genericsの詳細については、このテーマに関するSunのチュートリアル(PDF)を確認してください。

于 2010-05-12T02:50:36.307 に答える
2

解決策は、メソッドシグネチャをから変更することです

public Set getSet()

public Set<String> getSet()

Setにrawを割り当てようとしてSet<String>いますが、前者は後者が保持できない値を保持できるため、本質的に安全ではありません。

メソッドのパラメーター化を試して、、、、またはその他のタイプでString機能するようにすることもできます。IntegerT

于 2010-05-12T02:52:36.770 に答える
1
public Set<String> getSet()  // You need to change the signature to this.
{
    Set<String> set = new HashSet<String>();
    return set;
}
于 2010-05-12T02:54:53.733 に答える
0

getSet()呼び出しの戻り型を正しく宣言するのを忘れました。

あなたが持っている:

public Set getSet() {

一方、あなたはこのようなものを返したいSet<String>

public Set<String> getSet() {
于 2010-05-12T02:50:53.943 に答える
0

メソッドはSetではなくSet<String>を返すので、割り当てると、これSet<String> mySet = Set; はチェックされていない操作です。

于 2010-05-12T02:51:25.897 に答える