2009-04-25 31 views
9

私は警告以下になっています:警告:[unchecked]無検査変換

warning:[unchecked] unchecked conversion 
[javac]found:java.util.List 
[javac] required:java.util.List<edu.fullerton.cs476s09.espressobar.jpa.espressobar_milk> 
return query.getResultList(); 

何が問題と考えられる解決策をことがあります。任意の提案を事前に

@Stateless 
@Remote(Order.class) 
//@EntityListeners(MyListener.class) 
public class OrderBean implements Order 
{ 
    /** 
    * The entity manager object, injected by the container 
    */ 

    @PersistenceContext 

    private EntityManager manager; 

    public List<espressobar_milk> listMilk() 
    { 
     Query query = manager.createQuery("SELECT m FROM espressobar_milk m"); 
     return query.getResultList(); 
    }... 
..... 
..} 

ありがとう: 私は、次のコードを使用しています。

答えて

11

ここにはQueryの詳細がありませんが、おそらくgetResultListメソッドは生のListを返します。基本的にコンパイラは、getResultListによって返されたリストにはespressobar_milkのインスタンスしか含まれないことを確かめることができません(それはやや微妙ですが、今のところそれを残します)。

おそらくQueryクラスを変更することで、それは強く型付けさせるために試みることができる、またはあなたが確信している場合、それは正しいのですが、達成するための方法はありませんが、コンパイル時に

@SuppressWarnings("unchecked") 

とメソッドに注釈を付けることができ安全性。

+1

Java 1.7でこのメソッドに注釈を付けると、まだ警告が表示されます。しかし、クラス全体に注釈を付けると、警告は実際には表示されませんでした。 – Cerin

2

それが期待されているようにおそらく

return query.getResultList(); 

の結果は、(List<espressobar_milk>)、ListなくList<E>あります。 [http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html]それが警告を表示している理由です。いずれにせよ、あなたが使用して、この警告を抑制することができます。

@SuppressWarnings ("unchecked") 
public List<espressobar_milk> listMilk() 
{ 
    Query query = manager.createQuery("SELECT m FROM espressobar_milk m"); 
    return query.getResultList(); 
} 
1

未確認の変換警告は通常、ジェネリック医薬品のためのJavaの型消去メカニズムに起因します。ジェネリックを使用するコードは、ジェネリックを使用しないコードと協力することができます(実際に生成されたコードではジェネリック型が省略されています)。

しかし、(これはClassCastExceptionをスローするクラスベースのキャストとは異なるため)非ジェネリックリストへの総称を「タックオン」しようとすると、この警告が表示されます。この場合、getResultListによって非ジェネリックリストリターンになっているものにミルクタイプを書き留めようとすると、エラーが発生します。

Java Generics tutorialをご覧ください。

3

現在、JPA 1.0を実装しているHibernateを使用しているようです。(リリース時には、JPA 2.0はJPA 2.0を実装することを望みます(Toplinkは現在JPA 2.0のリファレンス実装です))。 Hibernateはjava 1.5の機能を使用していないので、汎用コレクションは利用できません。

1
@SuppressWarning ("unchecked") 

は次のようになります。

@SuppressWarnings("unchecked") 
10

私はEJB 3.1を使用していると私は同じ問題を抱えていました。

TypedQuery<espressobar_milk> query = manager.createQuery("SELECT m FROM espressobar_milk m", espressobar_milk.class);   
return query.getResultList(); 

これは未確認の会話警告を(あなたはもう@SuppressWarningsアノテーションを必要としません)解決:私は別の解決策を見つけました。

関連する問題