如何将对象强制转换为类对象(作为参数引入)-Java
这个问题听起来可能令人困惑,老实说确实如此。我会尽力向大家解释我自己 我正在创建一个方法,使用如何将对象强制转换为类对象(作为参数引入)-Java,java,reflection,casting,Java,Reflection,Casting,这个问题听起来可能令人困惑,老实说确实如此。我会尽力向大家解释我自己 我正在创建一个方法,使用Java反射,从给定类创建一个新对象,并将其添加到列表。 我的班是:火车。所以我的列表是list,但是我从反射创建的对象中得到的是一个普通/普通对象。我的意思是,只有方法toString,hashCode等的对象,而没有Train类方法。因此,我需要将对象强制转换为Train类型的对象。类似于:traintt=(Train)对象 我陷入困境的地方是,该方法知道类,因为它包含在一个参数中,但我不知道如何转
Java
反射
,从给定类创建一个新对象,并将其添加到列表
。
我的班是:火车。所以我的列表是list
,但是我从反射创建的对象中得到的是一个普通/普通对象。我的意思是,只有方法toString
,hashCode
等的对象,而没有Train类方法。因此,我需要将对象强制转换为Train类型的对象。类似于:traintt=(Train)对象代码>
我陷入困境的地方是,该方法知道类,因为它包含在一个参数中,但我不知道如何转换它。。。哼,我知道。让我们展示一个实际的例子
班次:
public class Train {
private String name;
private int id;
private String brand;
private String model;
public Train(String name, int id, String brand, String model)
{
this.name = name;
this.id = id;
this.brand = brand;
this.model = model;
}
public void setName(String name) {
this.name = name;
}
public void setId(int id) {
this.id = id;
}
(... more sets and gets)
}
我的方法(在这里我在评论中解释了我被卡住的地方):
公共类NewMain{
公共静态void main(字符串[]args){
试一试{
列表=新的ArrayList();
qqCoisa(列表、训练类、字符串类、整数类);
}捕获(ClassNotFoundException ex){
System.out.println(“Erro ClassNotFound->”+ex.getMessage());
}catch(NoSuchMethodException-ex){
System.out.println(“Erro NoSuchMethod->”+ex.getMessage());
}catch(实例化异常){
System.out.println(“实例化异常->”+ex.getMessage());
}捕获(非法访问例外){
System.out.println(“illegalAccessException->”+ex.getMessage());
}捕获(IllegalArgumentException ex){
System.out.println(“IllegalArgumentException->”+ex.getMessage());
}捕获(调用TargetException ex){
System.out.println(“调用目标异常->”+ex.getMessage());
}
}
publicstaticvoidqqqcoisa(List List,Class theClass,Class_string,Class_int)抛出ClassNotFoundException,NoSuchMethodException,InstantiationException,IllegalAccessException,IllegalArgumentException,InvocationTargetException
{
Constructor=class.getConstructor(_string,_int,_string,_string);
ctor.setAccessible(true);
Object obj=ctor.newInstance(“列车XPTO”,1,“沃尔沃”,“FH12”);
//这就是我被卡住的地方,在这种情况下,我知道这是一个火车物体,所以
//我用“人工”的方式来训练,但我想做的是让它成为现实
//为参数中包含的相同类型的类强制转换。
//类似于:类t=(类)obj;
列车t=(列车)obj;
列表。添加(t);
System.out.println(“T-toString->”+T.toString());
System.out.println(“Obj-toString->”+Obj.toString());
}
如果我没有解释我自己,请让我知道,我会进一步解释。您可以声明qqCoisa方法,如下所示:
public static <T> void qqCoisa(List<T> list, Class<String> _string, Class<Integer> _int) throws Exception
{
....
....
@SuppressWarnings("unchecked")
T t = (T) obj;
list.add(t);
....
....
}
publicstaticvoidqqqcoisa(列表、类字符串、类int)引发异常
{
....
....
@抑制警告(“未选中”)
T=(T)obj;
列表。添加(t);
....
....
}
这是一个处理类型为T的参数的泛型方法。一旦您将参数类型声明为T,类参数将是多余的,因为方法声明包含此信息。谢谢!您能解释一下它的作用吗?我知道它与Java泛型有关,但我对它很陌生。T.toString()
和obj.toString()
是等效的。是的,我知道,我忘了删除它们……那是在我测试解决此问题的其他方法时。
public static <T> void qqCoisa(List<T> list, Class<String> _string, Class<Integer> _int) throws Exception
{
....
....
@SuppressWarnings("unchecked")
T t = (T) obj;
list.add(t);
....
....
}