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()
{
}
}
以下は著者の公開数、歓迎の注意です。