我想知道在Java中是否有办法做这样的事情:
Integer a = new Integer(2);
a.getClass() newVariable = new Integer(4);
我的问题是我可以通过使用变量来声明新变量的类型吗?
答案 0 :(得分:2)
无法通过从其他变量中检索类型来指定类型。
请注意,Oracle的the reflection tutorial提供了一些可以模拟它的方法。它允许您通过将对象类型指定为类来实例化对象。但是,这不允许您首先通过从变量中检索它来指定对象类型。
您可能需要查看generics,这可能会帮助您解决导致您提出此问题的隐藏问题。
一个简单的例子是
public class Foo<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
请注意,T
代表按documentation列出的类型。
@param被装箱的值的类型
所以你可以给任何类型。
您还可以指定类型的扩展名,这种类型可以为您提供一些安全性。
class Foo<T extends Integer>
答案 1 :(得分:1)
不,你不能将变量的类型基于另一个变量的类型。
根据您的真实目标,您可能可以使用Java的泛型来解决您想要这样做的原因,但这很大程度上取决于您的真正目标是什么。例如,如果这是全部在类Foo
中,您可以对其进行参数化,然后在两个地方使用该参数:
class Foo<T> {
public method doSomething() {
T a = /*...*/;
T newVariable = /*...*/;
}
}
然后:
Foo<Integer> f = new Foo<Integer>();
...会生成一个f
,doSomething
可以使用Integer
并返回/*...*/
。
请注意上面=
之后的new T()
:我不能在那里a
,这是Java的泛型的一个着名的限制。 newVariable
和{{1}}的值必须来自某个地方(例如,方法的参数或数据成员等)。
More about generics here,再次取决于他们是否真的有助于您最终尝试做的事情。