0

Enumにあり、java.lang.EnumObjectありjava.lang.Objectます。では、なぜではEnumないのObjectでしょうか? (私は を取得していますjava.lang.ClassCastException)

Objectこのようにとの両方を受け入れるクラスを作りたいのですがEnum...

public class MyType<T extends Enum<T>, Object> {

しかし、これはコンパイルエラーになります。MyTypeすべて (または両方) のクラスを受け入れるようにするにはどうすればよいですか? (EnumまたはObject)?

4

5 に答える 5

2

すべての Java オブジェクトはであるため、境界なしinstanceof Objectで宣言するよりも良いことはありません。MyType<?>これにより、列挙型を含むすべての型がキャプチャされます。

于 2012-06-28T13:55:57.280 に答える
1

列挙型はオブジェクトです。http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.htmlを参照して ください

MyType<Object> {

動作するはずです。

于 2012-06-28T13:55:17.470 に答える
0

クラスオブジェクトのAPIを見るだけで、次のように読むことができます。

Class Object is the root of the class hierarchy. Every class has Object as a superclass. 
All objects, including arrays, implement the methods of this class. 

これは、それEnumがオブジェクトであることを意味します(これは、JavaDocs for Enumも確認できます)。したがって、単にMyTypeObject()を含めるように指示するMyType<Object>と、最初に投稿したとおりにObjectとEnumを受け入れます。

ただし、これは望ましくない動作を引き起こす可能性があり、すべてのクラスがオブジェクトであるため、安全でないと見なされることに注意してください。

于 2012-06-28T14:00:47.710 に答える
0

あなたの質問が正しく述べられていないと思います。Enum クラスにor を受け入れてほしいと思いますObject。そのように言えば、それが唯一の可能な選択肢であることがわかります。

を受け入れるようにしたい場合、それは「受け入れる」Enum Object言うのと同じEnumです。その場合、> が答えです。

于 2012-06-29T01:00:27.300 に答える
0

ドキュメントで見ることができます:

スーパークラスを持たない Object を除いて、すべてのクラスには直接スーパークラスが 1 つだけあります (単一継承)。他の明示的なスーパークラスがない場合、すべてのクラスは暗黙的に Object のサブクラスになります。

次のように結論付けることができます。

  1. 明示的でなくても、あなたのクラスはObject;から拡張されます。
  2. Javaは多重継承をサポートしていないため、他のクラスを表現するための計算された方法であった場合Object、それはできません。
于 2012-06-28T13:56:12.640 に答える