Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将对象强制转换为类对象(作为参数引入)-Java_Java_Reflection_Casting - Fatal编程技术网

如何将对象强制转换为类对象(作为参数引入)-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);

    ....
    ....
}