Anakin001:
私は、そのクラスのコンストラクタに列挙型の要素数の大きさを持つ配列を作成し、列挙型を持つクラスをパラメータ化します。
私はこのようなクラスを作成しました:
public class LogLine <T extends Enum<T>> {
そして、コンストラクタで、私はこれを書いてみました:
public LogLine(){
numberOfElementsInEnum = T.values().length;
//then I would create the Array based on the numberOfElementsInEnum variable
それは動作しません。コンパイラは、値のメソッドは表示されません。私はTが文字列の代わりに、列挙型を拡張してみました。すべての静的メソッドは、アクセス可能です。ここでの問題は何ですか?
マイケル:
あなたは厳密にはありません「する必要がコンストラクタにクラスを渡します」。いくつかのケースでは、これはあなたのクラスをインスタンス化する人のために無用不便です。
それはすべてあなたのインターフェイスに依存します。
あなたのインターフェースが(そして、あなたがしている伐採ことを考えると、私はそれがあるかもしれない疑いがある)純粋にアイテムの消費者である場合は、いい加減にあなたが実際にアイテムを消費している時点で、値の数を計算して逃げることができます。
class LogLine<T extends Enum<T>>
{
public void add(T item)
{
int numberOfElementsInEnum = item.getDeclaringClass().getEnumConstants().length;
}
}
私たちはあなたの要件を知っている必要があるだろうとの実装の残りの部分を見るためにLogLine
、このアプローチが適しているかどうかと言うこと。