2015-03-25 77 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