2016-06-15 6 views
-1

私は既存のJavaプログラムで作業しています。そのクラスの1つはいくつかのブール関数を計算します。最初の引数がString型であり、第二つPredicateタイプであるので、それは、これを実現するためHashMapを使用:javaの述語型の入力を伴うHashMap

featureMap = new HashMap<String, Predicate<ChunkedBinaryExtraction>> 

featureMapが一部によって定義され、返されるいくつかの文字列と述語値によって手動で設定されていますプライベートメソッド(例:featureMap.put("extr phrase", extrCoversPhrase());)。

私は機能にアクセスする必要があるの値(第2引数)ので、私はこのコードを使用:

Set set = featureMap.entrySet(); 
Iterator i = set.iterator(); 
while(i.hasNext()) { 
    Map.Entry me = (Map.Entry)i.next(); 
    System.out.print(me.getKey() + ": "); 
    System.out.println(me.getValue()); 
} 

それが適切ではなく、二番目の(機能最初の引数を抽出できた値を)!

extr phrase: [email protected]a7bc2 

me.getValue()は機能の値を取得するための適切な文をISNOTようだ:それはこのような何かを返しますか?

+2

生の型を使うのではなく、 'Set'と' Map.entry'を適切にパラメータ化してください。 – Mena

+0

@Menaが正しい!生の型は使わないでください!効果的なJavaの第2版、第5章、項目23をチェックしてください:生の型を使わないでください! –

答えて

1

これは、マップ値がReVerbFeaturesクラスのオブジェクトであることを伝えるだけです。そしてそのクラスは "toString()"メソッドをオーバーライドしていないので、人間には読みにくい出力が得られます。

しかし、問題は次のとおりです。あなたはそのクラスのオブジェクトを手元に持っています。だからあなたはそれをキャスティングすることができます

ReVerbFeatures feature = (ReVerbFeatures) me.getValue(); 

たとえば、そのクラスのメソッドのいずれかを呼び出します。

他の人が言ったように:「生の種類」について読んで、可能であればそれに応じてコードを変更してください。

最後に、コードを処理する必要がある場合は、関連するすべての概念について学習するしか方法はありません。あなたは、あなたが理解していないものを扱うべきではありません。意味:これらの事柄について本当に学ぶ時間があれば、あなたは決めるべきです。あなたが今やっていることをやめること。本当に担当するスキルが不足している場合は、何かの責任を負いません。

+0

ありがとうございます。私はあなたのソリューションを適用しましたが、これを示しています:edu.washington.cs.knowitall.extractor.conf.ReVerbFeatures $ 13はedu.washington.cs.knowitall.extractor.conf.ReVerbFeaturesにキャストできません – BlueGirl

+0

ああ、そうです。 $数値は内部クラスを示します。だから多分あなたはあなたの質問を再加工しなければなりません...あなたが実際にそれらの値で何をしたいか教えてください。 – GhostCat

+0

:(これらの機能を取得する方法はありませんか?特定の文について、いくつかの機能を考慮し、それらをブール機能(trueまたはfalse)として計算します。これらの特徴のベクトル(例えば、(0,1,0、..))。 – BlueGirl

関連する問題