getInstance()から定義されたJavaは、ジェネリックを返します。

1.背景

多くの場合、実際のgetInstance()メソッドで使用されている工場出荷時のモードにオブジェクトを返す、それはそれに対応する受信したオブジェクトに対応するパラメータを返します。しかし、問題は非常に面倒、オブジェクトのニーズはキャストを返さなければ、です。

import java.lang.reflect.*;

public class test
{
    public static void main(String[] args) {
        test1 t1 = factory.getInstance("test1");
        test2 t2 = factory.getInstance("test2");
    }
}

class factory
{
    public static Object getInstance(String className)
    {
        try
        {
            return Class.forName(className).getConstructor().newInstance();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
}

class test1
{
    public test1()
    {
    }
}

class test2
{
    public test2()
    {
    }
}

コンパイラが通らない、型に互換性がないと述べました。
ここに画像を挿入説明

だから、プラスキャスト、コンパイラは、渡されました。

test1 t1 = (test1)factory.getInstance("test1");
test2 t2 = (test2)factory.getInstance("test2");

対処方法2

2つだけのクラスの例としては、あなたも手動でキャストすることができますが、複数のクラスはずああ?そして非常に怠惰な人々の種類は、一般的な-----大きな動きと、そのため、手動で変換しない場合は!

3.ジェネリック

使用クラスは、<T>は、一般的なキャストは避け、より効果的に怠惰な、<T> T、Tのためのデータを利用しながら、渡されたパラメータを変更しなければならないための戻り値の型への必要性を。

public static <T> T getInstance(Class<T> t)

4.完全なコード

import java.lang.reflect.*;

public class test
{
    public static void main(String[] args) {
        test1 t1 = factory.getInstance(test1.class);
        test2 t2 = factory.getInstance(test2.class);
    }
}

class factory
{
    public static <T> T getInstance(Class<T> t)
    {
        try
        {
            return t.getConstructor().newInstance();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
}

class test1
{
    public test1()
    {

    }
}

class test2
{
    public test2()
    {

    }
}

以下は著者の公開数、歓迎の注意です。

ここに画像を挿入説明

公開された46元の記事 ウォンの賞賛4 ビュー4079

おすすめ

転載: blog.csdn.net/qq_27525611/article/details/102746562