0

署名が次のようなクラスのパラメーターとして使用される列挙型を使用するプロジェクトがあります。

 public class MyClass<E extends Enum<E>> extends ExtendedClass

問題は、列挙型を定義して、新しい列挙型ごとに同じプログラミングを繰り返したくないということです。

実行時に列挙型を生成するByteBuddyを考えていました。しかし、私はこれを行うためのきちんとした方法を見つけていません。リソースはそれほど多くありません。

編集:

より具体的には、コードにあるもの:

private enum MyEnum{
    FOO, BAR;
}

MyClass<MyEnum> obs = new MyClass<MyEnum>() 

ByteBuddy によって生成された Enum を使用すると機能しません。この場合、型とは見なされません (コンパイル エラー)。

使用するトリックはありますか、それとも実行時にできることですか?

4

3 に答える 3

1

Byte Buddy で列挙型を簡単に作成できます。

Class<? extends Enum<?>> type = new ByteBuddy()
  .makeEnumeration("FOO", "BAR")
  // define methods/fields if required.
  .make()
  .load(MyClass.class.getClassLoader())
  .getLoaded();

これにより、列挙型が得られます。次の方法で定数を読み取ることができます。

Enum<?> foo = Enum.valueOf(type, "FOO");
Enum<?> bar = Enum.valueOf(type, "BAR");

免責事項:ただし、これが問題を解決するための最良のアプローチである場合、あなたの質問はアサーションを可能にするのに十分なユースケースを描写していません。

于 2016-08-17T15:15:15.410 に答える