Java:动态地将对象引用转换为引用的类?

标签 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;

??

为什么我想这样做
我有一个 Map,其中包含自定义枚举的键以及 String、Integer、Double 等类型的值。

我想对映射条目值执行特定于类的操作而不对转换类进行硬编码。

示例

enum keyEnum { height, color; }

public static void main(String[] args) {
    Map<keyEnum, Object> map= new HashMap();
    String value1 = "red";
    Double value2 = 3.2;
    map.put(keyEnum.color, value1);
    map.put(keyEnum.height, value2);

    double x = (Double) map.get(keyEnum.height) + 10.5;
}

我真的很想避免在最后一行对 (Double) 进行硬编码。到目前为止还没有找到解决方案,仅表明这可能是不可能的。

我正在将此设置用于需要写入和读取和写入大型 csv 文件的程序。我想要一种方法让 Java 能够自动适本地转换变量,这样我就不必记住或编写每个列类型的类。

我有一个所有列标题的枚举,我将其用作存储列变量的映射的键。这是为了避免对每列的数组索引进行硬编码(在 row.split(",") 之后),这是维护的噩梦。我愿意接受更好的方法

最佳答案

您没有按照预期使用 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:动态地将对象引用转换为引用的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244993/

相关文章:

c++ - 将 union 转换为其成员类型之一

java - 并发应用程序不如单线程快

java - 相当于 Java 8 中的 new Date().getTime()

java - Hibernate 实体 Autowiring

java - Java如何处理多线程中的Errors?

将 float 转换为 int 会改变值

java - 如何优化最常出现的值(数亿行)的检索

swift - Xcode 6.3 和 Swift 1.2 中的新警告 : Cast from '[SKNode]' to unrelated type 'String' always fails

java - 是否可以在 Java 中阻止/拒绝转换?

Java:类型转换问题