私は一度購入したスパークチャートを使ってJava言語のいくつかを見直そうとしていました。彼らはこの例を与える匿名内部クラスの使用について:匿名の内部クラスの例の妥当性の懸念
Dice rollDice() {
return new Dice() {
int number = (int)(Math.random() * 6) + 1;
};
}
問題は、私はこれがどのように動作するか表示されていない、とコンパイラは別のクラス内のメソッドとしてそれを受け入れることを得ることができない、です。コンパイラは、 "シンボルが見つかりません"というダイへの各参照について不平を言っています。
例を正しく理解していないか、この完全に無効なコードですか?前もって感謝します!
p.s.これが動作するコードであれば、誰かが私にそれをどのように使用できるかの例を教えてくれますか?
編集:私は匿名の内部クラスの構文はこの上記のコードは、スーパークラスのインスタンスを取るメソッドに渡され
new SuperClassName/InterfaceName() {
// Implement or override methods in superclass or interface
// Other methods if necessary
}
の下に表示、または完全に実装されて 最終的に理にかなって何かを発見しましたインタフェース。たとえば、EventHandler
パラメータを持ち、handle(ActionEvent e)
メソッドを実装するクラスを定義していないメソッドです。このようにして
enlargeButton.setOnAction(
new EventHandler<ActionEvent>() {
public void handle(ActionEvent e) {
circlePane.enlarge();
}
});
、それは本当に匿名になります。私は、Javaのチュートリアルで与えられた例が非常に悪いと思う。
Javaに標準のDiceクラスがないため、「シンボルが見つかりません」。その例にはおそらくあなたが私たちに示していない他の部分が含まれています。とにかく、これは、この例を不明瞭にする匿名の内部クラスを使用するのが好ましい方法のようには見えません。 – Pshemo
いいえ、この例には私があなたに見せていない部分はありません。これが私が質問している理由です。私には非常に不明で、私はそれを正しく読んでいないのか、本当にこの例の使用を理解していないのだろうかと思っていました。私は今、彼らの例がゴミだけであると仮定しています。 – bmcentee148
このコードは、たとえば 'class Dice {...}'に配置する場合にコンパイルされます。しかし、この例は、Diceオブジェクトに乱数をラッピングするだけなので、それほど有用ではありません。このようなダイスでは、すべての1-6の数字を返すことはできませんが、この例を少なくとも不明瞭にする1つの数字だけを返すことができます。匿名のクラスについて知りたい場合は、https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.htmlなどの公式チュートリアルを使用することを検討してください。 – Pshemo