2012-09-27 145 views
2

我想知道是否有可能將Object轉換成別的東西。Java - Casting,仿製藥,對象和陣列

我有一個對象,其中包含一系列數字以隨機順序排列,如:3,4,2,5,1,並且想知道我是否可以將它變成int []或從中選擇某些元素,如從序列中的數字?

編輯: 所以一些代碼,我的是:

//This contains all the different combinations of the numbers 
ArrayList routePop4 = new ArrayList(); 
//This picks out the first one, just as a test 
Object test = routePop4.get(0); 

但這個想法是,我想通過測試的每個元素循環。

+3

**它是如何包含這些數字的?給我們一些代碼。 –

+0

一個實際的例子可以幫助你很多。 – Lion

+0

添加了一些代碼 –

回答

2

Object不能「包含一系列數字」。然而,Object的許多子類(如所有Collections)都可以「包含一系列數字」,並且它們帶有toArray()方法以將集合的內容轉換爲數組。

如果你有一個集合,但只可以訪問它作爲一個對象,你需要轉換之前,你可以用它正常工作:

ArrayList<Integer> list = (ArrayList<Integer>)test; 
Integer[] arr = list.toArray(new Integer[]{}); 

這是相當罕見的在一天到一天的Java要實際上使用Object轉換爲變量,如果是的話,它應該是一個紅旗,你可能會做錯某些事情。您可以使用generics允許包含其他對象的對象,以使一般做的,就像這樣:

ArrayList<Integer> list = new ArrayList<Integer>(); 
list.add(1); // Can only add integers, list.add("a string") would fail at compile time 
int n = list.get(0); // no need to cast, we know list only contains Integers 

如果您使用的不是收藏,你可能需要推出自己的,因爲盧克·泰勒的回答表明, 。也就是說,如果您可以提供更多信息,您將得到更好的答案,但您的問題的當前文本在Java上下文中沒有意義。

+0

instanceof在任何參數上的'Collection'不起作用,這將不會編譯。檢查的唯一方法是手動檢查每個元素或使用Guava過濾集合。 – Brian

+0

@Brian好電話,刪除無效的代碼。 – dimo414

+0

謝謝:) +1(去掉downvote)和+1結尾處的信息。無論如何,原始類型(沒有泛型參數的泛型對象)並不是一個好主意,因爲所有類型的安全陷阱都可能會誘騙你。 – Brian

1

看到您的修改後,我建議您利用仿製藥。

當你聲明ArrayList時,你可以指出它將包含什麼類型的對象。

例如,如果你知道你的ArrayList將包含字符串,你可以這樣做:

List<String> myList = new ArrayList<String>();

如果列表中的每個元素是一個整數數組,你可以這樣做:

List<Integer[]> listOfIntegerArrays = new ArrayList<Integer[]>();

然後,你可以從你的列表中得到任何元素,並將其分配到一個整數數組是這樣的:

Integer[] integerArray = listOfIntegerArrays.get(0);

然後,你可以每一個整數遍歷列表如下:

for (Integer loopInteger : integerArray) { 
    System.out.println("The value: " + loopInteger); 
} 

仿製藥的一些更多閱讀:

+0

我在 –

+0

@AndrewMurphy上添加了一些代碼 - 更新了我的答案。 – jahroy

0

你可以d Ø是這樣的:

int[] numbersFromObject = new int[yourObject.getAmountOfNumbers()]; 

// Initialize array with numbers from array 
for(int i = 0; i < yourObject.getAmountOfNumbers(); i++) { 
numbersFromObject[i] = yourObject.getNumber(i); 

} 

我不知道你的對象包含什麼樣的方法,但我敢肯定,你就可以調整到以下上面提到的。

我希望這會有所幫助。

+1

你也可以把這個邏輯放在對象本身中。你可以創建MyObject.toArray()並且_IT_創建並實例化數組。這就是面向對象編程的一點。 – jahroy

+0

它不斷提出「方法getAmountOfNumbers()未定義類型對象」。我正在使用android,這是否有所作爲? –

+0

@ jahroy,這似乎是一個好主意。 @安德魯墨菲,不,這與Android沒有任何關係,這是因爲您尚未在創建對象的類中創建該方法。 –