Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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_Casting - Fatal编程技术网

Java:动态地将对象引用转换为引用';什么课?

Java:动态地将对象引用转换为引用';什么课?,java,casting,Java,Casting,是否可以使用其他变量而不是使用类的名称强制转换变量 以下是运行代码: Object five = new Integer(5); int six = (Integer) five + 1; 我很想把第二行换成 int six = five + 1; 但是我不能,所以我可以做一些类似于以下选择之一的事情: int six = (foo) five + 1; int six = foo(five) + 1; int six = foo.cast(five) + 1; ? 我为什么要这样做 我有

是否可以使用其他变量而不是使用类的名称强制转换变量

以下是运行代码:

Object five = new Integer(5);
int six = (Integer) five + 1;
我很想把第二行换成

int six = five + 1;
但是我不能,所以我可以做一些类似于以下选择之一的事情:

int six = (foo) five + 1;
int six = foo(five) + 1;
int six = foo.cast(five) + 1;
?

我为什么要这样做
我有一个带有自定义枚举键的映射,以及String、Integer、Double等类型的值

我希望对映射条目值执行特定于类的操作,而无需硬编码cast类

范例

enum keyEnum{height,color;}
公共静态void main(字符串[]args){
Map Map=newhashmap();
字符串值1=“红色”;
双值2=3.2;
map.put(keyEnum.color,value1);
map.put(keyEnum.height,value2);
double x=(double)map.get(keyEnum.height)+10.5;
}
我真的希望避免硬编码最后一行中的
(双)
。到目前为止还没有找到解决办法,只是有迹象表明这可能是不可能的

我使用这个设置的程序,需要写,读,写大型csv文件。我希望Java能够自动适当地转换变量,这样我就不必记住或编写每种列类型的类


我有一个所有列标题的枚举,用作存储列变量的映射的键。这是为了避免硬编码每列的数组索引(在row.split(“,”)之后),这是维护的噩梦。我愿意采用更好的方法来实现这一点

将类类型存储在变量中,并利用cast方法


Class cls
cls.cast()

将类类型存储在变量中,并利用cast方法


Class cls
cls.cast()

将类类型存储在变量中,并利用cast方法


Class cls
cls.cast()

将类类型存储在变量中,并利用cast方法


Class cls
cls.cast()

您没有按预期使用Java,因此它将变得缓慢、不安全和丑陋。你应该做的是

class MyType { double height; String color; }

public static void main(String[] args) {
    MyType mt = new MyType();
    mt.color = "red";
    mt.height = 3.2;

    double x = mt.height;

    // to iterate over the fields
    for(Field field: MyType.class.getDeclaredFields()) {
        System.out.println(field.getName() + "= "+ field.get(mt));
    }
}

通过编译时检查,这将更加安全,使用更少的代码,使用更少的内存和CPU。

您没有按照预期使用Java,因此它将变得缓慢、不安全和丑陋。你应该做的是

class MyType { double height; String color; }

public static void main(String[] args) {
    MyType mt = new MyType();
    mt.color = "red";
    mt.height = 3.2;

    double x = mt.height;

    // to iterate over the fields
    for(Field field: MyType.class.getDeclaredFields()) {
        System.out.println(field.getName() + "= "+ field.get(mt));
    }
}

通过编译时检查,这将更加安全,使用更少的代码,使用更少的内存和CPU。

您没有按照预期使用Java,因此它将变得缓慢、不安全和丑陋。你应该做的是

class MyType { double height; String color; }

public static void main(String[] args) {
    MyType mt = new MyType();
    mt.color = "red";
    mt.height = 3.2;

    double x = mt.height;

    // to iterate over the fields
    for(Field field: MyType.class.getDeclaredFields()) {
        System.out.println(field.getName() + "= "+ field.get(mt));
    }
}

通过编译时检查,这将更加安全,使用更少的代码,使用更少的内存和CPU。

您没有按照预期使用Java,因此它将变得缓慢、不安全和丑陋。你应该做的是

class MyType { double height; String color; }

public static void main(String[] args) {
    MyType mt = new MyType();
    mt.color = "red";
    mt.height = 3.2;

    double x = mt.height;

    // to iterate over the fields
    for(Field field: MyType.class.getDeclaredFields()) {
        System.out.println(field.getName() + "= "+ field.get(mt));
    }
}


通过编译时检查,这将更加安全,使用更少的代码,并使用更少的内存和CPU。

Java是一种强类型语言。为什么Java不允许
intsix=five.getClass().cast(five)+1?Java是一种强类型语言。为什么Java不允许
intsix=five.getClass().cast(five)+1?Java是一种强类型语言。为什么Java不允许
intsix=five.getClass().cast(five)+1?Java是一种强类型语言。为什么Java不允许
intsix=five.getClass().cast(five)+1?但我想使用enum只在代码中的一个位置指定列顺序。并循环遍历所有列(无需构建额外的结构,然后必须更改每个内部列的顺序并确保它们都匹配)。我想让代码读取csv文件,并找出哪个列与哪个变量一起使用。我希望能够通过在一个位置更改代码来添加/删除/移动列,而不必更改每个标题输出、数据输出和数据输入的代码。对于多个文件结构,每个都是。使用枚举可以做到这一点。@stuart确实如此,但它会让您的所有其他代码感到痛苦。如果要在字段上迭代,我会使用反射。My
MyType
类也在一个位置定义。为了检测csv文件中的列名/位置,我认为使用
MyType
我需要为每个列变量增加两个额外的索引变量(输入和输出,以便在需要更改顺序时使用)。我有55个专栏。然后我将更改列的名称,但是忘记更改列的索引变量的名称,并且会感到困惑。使用enum,我可以添加
int-in_i
int-out_i
索引变量,每个enum值都是唯一的。你能帮我理解enum怎么会更痛苦吗?到目前为止,这样做的痛苦要小得多,但我是新手。@stuart您只需要一个字段名到列id的映射。您不必在每个记录/行中都存储此映射。但我想使用enum仅在代码中的一个位置指定列顺序。并循环遍历所有列(无需构建额外的结构,然后必须更改每个内部列的顺序并确保它们都匹配)。我想让代码读取csv文件,并找出哪个列与哪个变量一起使用。我希望能够通过在一个位置更改代码来添加/删除/移动列,而不必更改每个标题输出、数据输出和数据输入的代码。对于多个文件结构,每个都是。使用枚举可以做到这一点。@stuart确实如此,但它会让您的所有其他代码感到痛苦。如果要在字段上迭代,我会使用反射。My
MyType
类也在一个位置定义。为了检测csv文件中的列名/位置,我认为使用
MyType
我需要为每个列变量增加两个额外的索引变量(输入和输出,以便在需要更改顺序时使用)。我有55个专栏。然后我将更改列的名称,但是忘记更改列的索引变量的名称,并且会感到困惑。使用enum,我可以在_i
a中添加
int