public Object foo(int opt){
if (opt == 0) return new String();
else if (opt == 1) return new Integer(1);
else if (opt == 2) return new Double(1);
else if ...
.. and many more
}
public void doSomething(String s){..}
public void doSomething(Integer i){..}
public void doSomething(Double d){..}
... and many more doSomething method
public static void main(String[] args){
...
Object o = foo(x); //x is a value obtained during runtime, e.g. from user input
//now I want to call doSomething method
// (1)
if (o instanceof String) doSomething((String) o);
else if (o instanceof Integer) doSomething((Integer) o);
else if (o instanceof Double) doSomething((Double) o);
...
// (2)
}
有没有更好的方法来简化由(1)…(2)括起来的语句?
Java Reflection有帮助吗?
高效,干净地处理此问题的最佳方法是让foo返回对象的holder类。
abstract class Holder<T> {
private final T object;
protected Holder(T object) { this.object = object; }
public T get() { return object; }
public abstract void doSomething();
}
public Holder foo(int opt) {
if (opt == 0) return new Holder<String>("") {
public void doSomething() { }
};
else if (opt == 1) return new Holder<Integer>(1) {
public void doSomething() { }
};
else if (opt == 2) return new Holder<Double>(1.0) {
public void doSomething() { }
};
// many more
}
public static void main(String... args) throws IOException {
Holder h = foo(x); //x is a value obtained during runtime, e.g. from user input
//now I want to call doSomething method
h.doSomething();
}
我正在尝试有一个通量通用转换器使用通用类型在Java 8。我把我的代码建立在这个答案的基础上。其思想基本上是实现这个特定的转换器->: 类型转换器->转换为我想要的任何类型。因此,我正在使用构造函数创建一个类型为的类,并返回一个方法。我想在调用上创建类似这样的多个条目:,但类类型不同。但它甚至对整数也不起作用。 当我使用此单元测试进行测试时,我得到错误:。
问题内容: 如何将reflect.Value转换为其类型? 谢谢! 问题答案: 好,我找到了 具有将其转换为
我正在创建一个由数组支持的泛型类型堆栈。当我尝试创建泛型类型数组时,Java不允许我这样做。有人告诉我,我必须创建一个类型为Object的数组,并将其转换为泛型类型。我已经将对象数组转换为类型,但如何处理Java不断给我的未检查类型错误? 这就是我目前所处的位置。 更新:我正在创建一个对象数组,然后在方法的末尾将返回类型转换为T类型。
问题内容: 我正在使用返回“对象”类型的普通对象的Web服务。调试清楚地表明此对象中存在某种Array,因此我想知道如何将“ Object”转换为Array(或类似对象)? 我尝试了以下方法: 但是没有任何效果。我总是得到一个InvocationTargetException。 我究竟做错了什么? 编辑 : 可悲的是,我不得不删除指向显示Eclipse调试器输出的图像的链接,因为它不再可用。请不要
问题内容: 如果你有一个具有原始类型(例如Byte,Integer,Char等)的Java对象数组。有没有一种巧妙的方法可以将其转换为原始类型的数组?特别是可以做到这一点,而不必创建新的数组并遍历内容。 因此,例如 将其转换为最简洁的方法是什么 不幸的是,在Hibernate和我们无法控制的某些第三方库之间进行接口连接时,这是我们经常要做的事情。看来这是一个很普通的操作,所以如果没有捷径,我会感到
我有下面的代码。 我得到编译器错误时,分配到,因为它的类型。我知道这是与继承,但我不知道为什么,因为内容是相同的。此外,我如何强制将其转换为。 我试过了 但是它在前者中抛出了一个关于转换的异常,在后者中变成了null。不知道去谷歌上找什么。我的意思是像这样,但完全相反。