从Java中的Variable声明新类

时间:2015-03-25 12:47:44

标签: java variables declaration

我想知道在Java中是否有办法做这样的事情:

Integer a = new Integer(2);
a.getClass() newVariable = new Integer(4);

我的问题是我可以通过使用变量来声明新变量的类型吗?

2 个答案:

答案 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>();

...会生成一个fdoSomething可以使用Integer并返回/*...*/

请注意上面=之后的new T():我不能在那里a,这是Java的泛型的一个着名的限制。 newVariable和{{1}}的值必须来自某个地方(例如,方法的参数或数据成员等)。

More about generics here,再次取决于他们是否真的有助于您最终尝试做的事情。