クラスがわかっている場合の(ボックス化された)プリミティブインスタンスの作成

ジョナス・プラッカ:

提供されたクラス型のインスタンスを返すメソッドが必要です。提供されたタイプが、それらの「空の」インスタンスを作成できるように制限されていると仮定しましょう。たとえば、指定するString.classと空の文字列Integer.classが返され、指定すると初期値がゼロの整数が返されます。しかし、どうすればその場で(ボックス化された)プリミティブ型を即座に作成できますか?このような?

public Object newInstance(Class<?> type) {
    if (!type.isPrimitive()) {
        return type.newInstance(); // plus appropriate exception handling
    } else {
        // Now what?
        if (type.equals(Integer.class) || type.equals(int.class)) {
            return new Integer(0);
        }
        if (type.equals(Long.class) // etc.... 
    }
}

可能なすべてのプリミティブタイプを反復処理する唯一のソリューションはありますか、それともより簡単なソリューションがありますか?両方に注意してください

int.class.newInstance()

そして

Integer.class.newInstance()

InstantiationException(nullaryコンストラクタがないため)をスローします。

ジョン・スキート:

私は最も簡単な方法は地図を持つことだと思います:

private final static Map<Class<?>, Object> defaultValues = 
    new HashMap<Class<?>, Object>();
static
{
    defaultValues.put(String.class, "");
    defaultValues.put(Integer.class, 0);
    defaultValues.put(int.class, 0);
    defaultValues.put(Long.class, 0L);
    defaultValues.put(long.class, 0L);
    defaultValues.put(Character.class, '\0');
    defaultValues.put(char.class, '\0');
    // etc
}

幸い、これらの型はすべて不変であるため、同じ型の各呼び出しで同じオブジェクトへの参照を返すことは問題ありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

クラスがプリミティブ型を参照している場合、ASMを介して生成されたクラスのコンストラクターにアクセスするすべてのリフレクションメソッドはNoClassDefFoundErrorをスローします

分類Dev

前のタスクのいくつかのアイテムがスタックされている場合にのみ実行されるタスクを使用してセロリパイプラインを作成する

分類Dev

プリミティブとボックス化された値に==を使用する場合、オートボックス化が行われるか、ボックス化が解除される

分類Dev

別のインスタンスが非表示になっている場合、SVGはブラックボックスに変わります

分類Dev

ReactNativeのReactNavigationライブラリによって提供されるスタックナビゲーターコンポーネントのinitialRouteNameプロパティが存在しない場合はどうなりますか

分類Dev

エンティティにインデックス付けされていないデータが以前にある場合、インデックス作成はGoogleアプリデータストアでどのように機能しますか?

分類Dev

ボタンがストーリーボードから作成された場合、サブクラスのUIButtonタイプを変更します

分類Dev

クラスタイプが変数に格納されている場合、どのようにクラスのインスタンスを作成しますか?

分類Dev

MyClassがParentClassから継承する場合、MyClassによって作成されたインスタンスは、ParentClassのインスタンスプロパティとインスタンスメソッドも継承しますか?

分類Dev

一意のクラスター化インデックスを作成できないインデックス付きビューの場合、ケースステートメントが集計で使用されている場合

分類Dev

テーブルにクラスター化されていないインデックスが1つある場合、含める列の数によって、書き込み時の速度が低下しますか?

分類Dev

ラッパークラスがある場合、なぜプリミティブがサポートされているのですか?

分類Dev

ビューにフローティングアクションボタンが含まれている場合にのみスナックバーが表示されている場合、Androidエスプレッソテストがフリーズします

分類Dev

クラスのインスタンス化-角かっこがある場合とない場合の違い

分類Dev

クローンが作成されている場合、Windowsサーチの「インデックスオプション」が間違ったドライブを選択するのはなぜですか?

分類Dev

Opencv createsamplesユーティリティ:タイトなバウンディングボックスは、ポジティブサンプルの代わりにトリミングされていない画像を使用しますか?

分類Dev

クラスに別のクラスのオブジェクトが含まれていて、すべてのクラスがコンストラクターによって初期化される場合、初期化はどのように機能しますか?

分類Dev

リアクティブプログラミング(Reactor):なぜメインスレッドがスタックしているのですか?

分類Dev

pthreadがリンクされている場合にのみミューテックスを使用するライブラリを作成するにはどうすればよいですか?

分類Dev

チェックボックスでテンプレート化されたグリッドの列の行がチェックされている場合にボタンを有効にする

分類Dev

タイプが与えられた場合、どのタイプとしてボックス化されているかをどのように判断しますか?

分類Dev

リンクが含まれている場合、ブートストラップ アラート ボックスの高さが大きすぎる

分類Dev

複数のボタンがajaxmvcを介して存在する場合、クリックされたボタンのテキストを渡したい

分類Dev

APEX5.1のインタラクティブレポートで関連するチェックボックスがオンになっている場合に選択リストを有効にする方法

分類Dev

リストアイテムでチェックボックスがオンになっている場合、そのリストアイテムのテキストボックスのみを有効にします-クラスJqueryによって

分類Dev

オプションボタンが選択されている場合、どうすればアクティブクラスを追加できますか?

分類Dev

バイトにキャストするときに、ロング(ラッパー)がプリミティブロングにボックス化されないのはなぜですか?

分類Dev

2つのコンボボックスがアクティブになっている場合にのみボタンを有効にする方法

分類Dev

タイプクラスのインスタンスが誤って定義されている場合、バックグラウンドで何が起こっていますか?

Related 関連記事

  1. 1

    クラスがプリミティブ型を参照している場合、ASMを介して生成されたクラスのコンストラクターにアクセスするすべてのリフレクションメソッドはNoClassDefFoundErrorをスローします

  2. 2

    前のタスクのいくつかのアイテムがスタックされている場合にのみ実行されるタスクを使用してセロリパイプラインを作成する

  3. 3

    プリミティブとボックス化された値に==を使用する場合、オートボックス化が行われるか、ボックス化が解除される

  4. 4

    別のインスタンスが非表示になっている場合、SVGはブラックボックスに変わります

  5. 5

    ReactNativeのReactNavigationライブラリによって提供されるスタックナビゲーターコンポーネントのinitialRouteNameプロパティが存在しない場合はどうなりますか

  6. 6

    エンティティにインデックス付けされていないデータが以前にある場合、インデックス作成はGoogleアプリデータストアでどのように機能しますか?

  7. 7

    ボタンがストーリーボードから作成された場合、サブクラスのUIButtonタイプを変更します

  8. 8

    クラスタイプが変数に格納されている場合、どのようにクラスのインスタンスを作成しますか?

  9. 9

    MyClassがParentClassから継承する場合、MyClassによって作成されたインスタンスは、ParentClassのインスタンスプロパティとインスタンスメソッドも継承しますか?

  10. 10

    一意のクラスター化インデックスを作成できないインデックス付きビューの場合、ケースステートメントが集計で使用されている場合

  11. 11

    テーブルにクラスター化されていないインデックスが1つある場合、含める列の数によって、書き込み時の速度が低下しますか?

  12. 12

    ラッパークラスがある場合、なぜプリミティブがサポートされているのですか?

  13. 13

    ビューにフローティングアクションボタンが含まれている場合にのみスナックバーが表示されている場合、Androidエスプレッソテストがフリーズします

  14. 14

    クラスのインスタンス化-角かっこがある場合とない場合の違い

  15. 15

    クローンが作成されている場合、Windowsサーチの「インデックスオプション」が間違ったドライブを選択するのはなぜですか?

  16. 16

    Opencv createsamplesユーティリティ:タイトなバウンディングボックスは、ポジティブサンプルの代わりにトリミングされていない画像を使用しますか?

  17. 17

    クラスに別のクラスのオブジェクトが含まれていて、すべてのクラスがコンストラクターによって初期化される場合、初期化はどのように機能しますか?

  18. 18

    リアクティブプログラミング(Reactor):なぜメインスレッドがスタックしているのですか?

  19. 19

    pthreadがリンクされている場合にのみミューテックスを使用するライブラリを作成するにはどうすればよいですか?

  20. 20

    チェックボックスでテンプレート化されたグリッドの列の行がチェックされている場合にボタンを有効にする

  21. 21

    タイプが与えられた場合、どのタイプとしてボックス化されているかをどのように判断しますか?

  22. 22

    リンクが含まれている場合、ブートストラップ アラート ボックスの高さが大きすぎる

  23. 23

    複数のボタンがajaxmvcを介して存在する場合、クリックされたボタンのテキストを渡したい

  24. 24

    APEX5.1のインタラクティブレポートで関連するチェックボックスがオンになっている場合に選択リストを有効にする方法

  25. 25

    リストアイテムでチェックボックスがオンになっている場合、そのリストアイテムのテキストボックスのみを有効にします-クラスJqueryによって

  26. 26

    オプションボタンが選択されている場合、どうすればアクティブクラスを追加できますか?

  27. 27

    バイトにキャストするときに、ロング(ラッパー)がプリミティブロングにボックス化されないのはなぜですか?

  28. 28

    2つのコンボボックスがアクティブになっている場合にのみボタンを有効にする方法

  29. 29

    タイプクラスのインスタンスが誤って定義されている場合、バックグラウンドで何が起こっていますか?

ホットタグ

アーカイブ