2015-03-25 79 views
0

从变量声明新的类,我想知道是否有办法做这样的事情在Java中:在Java中

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

我的问题是我可以通过声明一个新变量的类型一个变量?

+0

我的问题是我可以通过使用一个变量存储我们想要的类来声明一个新变量的类型吗? – Justin 2015-03-25 12:49:35

+0

你可以请这么亲切的sircapsalot,给我一个例子吗? – Justin 2015-03-25 12:51:08

+3

如果您已经知道'a'的类型,那么在编译时尝试推断它是没有意义的。如果您不知道“a”的类型,那么它必须通过泛型传入,这意味着您已经有了答案。而这个特殊的例子没有多大意义,因为一个整数首先只能是Object或Integer。你想解决什么问题,具体是什么? – 2015-03-25 12:52:02

回答

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

@参数值的类型盒装

所以,你可以给任何类型。

你也可以指定类型的扩展,这种类型会给你一些安全性。

class Foo<T extends Integer> 
+1

谢谢你的回答! – Justin 2015-03-25 13:08:29

+0

@Justin不客气:)。 – 2015-03-25 13:09:02

1

不,你不能将变量的类型基于另一个变量的类型。

根据您的真实目标,您可能能够使用Java的泛型来解决您感觉想要这样做的理由,但这取决于您真正的最终目标是什么。例如,如果这是所有在Foo类,你可以将其参数化,然后用在这两个地方的参数:用

Foo<Integer> f = new Foo<Integer>(); 

...导致一个f

class Foo<T> { 
    public method doSomething() { 
     T a = /*...*/; 
     T newVariable = /*...*/; 
    } 
} 

然后doSomething与之配合并返回Integer s。

请注意在=之后的/*...*/:我不能在那里做new T(),这是Java泛型的一个着名的限制。 anewVariable的值必须来自某处(例如方法的参数或数据成员等)。

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

+1

谢谢你的回答! – Justin 2015-03-25 13:08:18