Java 基于参数的类的新实例
我试图创建一个函数,它接受扩展Java 基于参数的类的新实例,java,Java,我试图创建一个函数,它接受扩展Foo的许多类中的一个,并在其类中返回该对象的新实例,而不是Foo的新实例 我相信这是一个普遍的问题。有什么好的例子吗 我从未将类用作输入参数,仅使用类的成员。根据我搜索的内容,这应该是可能的?您可以在这里使用Java的反射 如果您只想通过类名获得类,可以使用Class.forName: Class type = Class.forName('package.SomeClass'); 您可以检查此类是Foo还是其子类: boolean isFoo = type.i
Foo
的许多类中的一个,并在其类中返回该对象的新实例,而不是Foo
的新实例
我相信这是一个普遍的问题。有什么好的例子吗
我从未将类用作输入参数,仅使用类的成员。根据我搜索的内容,这应该是可能的?您可以在这里使用Java的反射 如果您只想通过类名获得
类
,可以使用Class.forName
:
Class type = Class.forName('package.SomeClass');
您可以检查此类是Foo
还是其子类:
boolean isFoo = type.isAssignableFrom(Foo.class);
然后可以非常轻松地创建一个新实例(假设构造函数不带参数):
您可以在这里使用Java的反射 如果您只想通过类名获得
类
,可以使用Class.forName
:
Class type = Class.forName('package.SomeClass');
您可以检查此类是Foo
还是其子类:
boolean isFoo = type.isAssignableFrom(Foo.class);
然后可以非常轻松地创建一个新实例(假设构造函数不带参数):
您是将
类
对象作为参数传递,还是在Foo
子类的实例中传递
在这两种情况下,解决方案几乎是相同的,在类对象上使用该方法
/**
* Return a new subclass of the Foo class.
*/
public Foo fooFactory(Class<? extends Foo> c)
{
Foo instance = null;
try {
instance = c.newInstance();
}
catch (InstantiationException e) {
// ...
}
catch (IllegalAccessException e) {
// ...
}
return instance; // which might be null if exception occurred,
// or you might want to throw your own exception
}
/**
*返回Foo类的新子类。
*/
public Foo fooFactory(Class您是将类
对象作为参数传递,还是在Foo
子类的实例中传递
在这两种情况下,解决方案几乎是相同的,在类对象上使用该方法
/**
* Return a new subclass of the Foo class.
*/
public Foo fooFactory(Class<? extends Foo> c)
{
Foo instance = null;
try {
instance = c.newInstance();
}
catch (InstantiationException e) {
// ...
}
catch (IllegalAccessException e) {
// ...
}
return instance; // which might be null if exception occurred,
// or you might want to throw your own exception
}
/**
*返回Foo类的新子类。
*/
publicfoofactory(Class您的函数可以是这样的
public class NewInstanceTest {
public static Object getNewInstance(Foo fooObject){
java.lang.Class fooObjectClass = fooObject.getClass();
try {
return fooObjectClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
return null;
} catch (IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
public static void main(java.lang.String[] args){
// This prints Foo
java.lang.System.out.println(getNewInstance(new Foo()).getClass().getName());
// This prints Foo1
java.lang.System.out.println(getNewInstance(new Foo1()).getClass().getName());
}
}
class Foo{
}
class Foo1 extends Foo{
}
希望这能有所帮助。您的函数可以是这样的
public class NewInstanceTest {
public static Object getNewInstance(Foo fooObject){
java.lang.Class fooObjectClass = fooObject.getClass();
try {
return fooObjectClass.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
return null;
} catch (IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
public static void main(java.lang.String[] args){
// This prints Foo
java.lang.System.out.println(getNewInstance(new Foo()).getClass().getName());
// This prints Foo1
java.lang.System.out.println(getNewInstance(new Foo1()).getClass().getName());
}
}
class Foo{
}
class Foo1 extends Foo{
}
希望这有帮助。查看模式。查看模式。谢谢mate…现在似乎正在工作。对于其他阅读,在此之后我得到了一个异常并用此线程解决:谢谢mate…现在似乎正在工作。对于其他阅读,在此之后我得到了一个异常并用此线程解决: