aspose file tools*
The moose likes Java in General and the fly likes exceptions and type casting confusion Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "exceptions and type casting confusion" Watch "exceptions and type casting confusion" New topic
Author

exceptions and type casting confusion

Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82
Hi, i have this problem, when dealing with this Array of Objects.I need to be able to tell whether this object is a type String or is a type Boolean, etc,
and throwing an exception when the content of the first column it's not of the type that it says on the second column, the tricky part is that every time it runs, different objects have different datatypes..
Example:

Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82
I forgot, this is what i've done, but always catches an error, even when it supposed not to.
Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82
I've got it, here it is :
bart zagers
Ranch Hand

Joined: Feb 05, 2003
Posts: 234
Some remarks:

if(arr[i][1].toString()=="boolean")


It is usually not a good idea to compare Strings with the "==" operator. What you normally want is comparing using the equals method.
if(arr[i][1].equals("boolean"))

String b = new String(arr[i][0].toString());

When you know you have a String object, it is not needed to create a new one. Just cast the object to String
String b = (String)arr[i][0];

long l = new Long(arr[i][1].toString().trim()).longValue();

There is no need to create a Long object (or any Number object) here as Long has a useful static method to parse a String
long l = Long.parseLong(arr[i][1].toString().trim());

Btw, Is there a reason you have an array of Objects? All your elements are Strings, so you could just as well have an array of Strings.
[ May 20, 2008: Message edited by: bart zagers ]
Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82
the objects in the array aren't strings, i'm using the toString method just because the constructors of that clases(Integer, Boolean, etc) require a String parameters. But thanks for those observations.
bart zagers
Ranch Hand

Joined: Feb 05, 2003
Posts: 234
If they aren't Strings, what are they?
Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82
they are Objects, after the datatype comparison they are casted to the correspondant datatype.
bart zagers
Ranch Hand

Joined: Feb 05, 2003
Posts: 234
Ok, you have an array of Objects, but the actual elements of the array will not be instances of Object, but something else.
For example if you have your array
Object[][] arr
and you do
arr[0][0] = new Long(5);
arr[0][0] will contain an object of type Long.
So again, what will be the type(s) of the elements in the array?
Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82
Suppose i'm calling this method once, and this time the array will be:

arr[0][0]= pedro , arr[0][1] = String
arr[1][0]= 123 , arr[1][1] = int
arr[2][0]= c , arr[2][1] = char
arr[3][0]= bill , arr[3][1] = String

Now i'm calling the method for the second time and the parameter passed is:

arr[0][0]= -235 , arr[0][1] = short
arr[1][0]= 1.2 , arr[1][1] = float
arr[2][0]= asd123 , arr[2][1] = String
arr[3][0]= x , arr[3][1] = char
Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82
As you can see the elements of the array may vary in each call, you may wonder what is this for, well i'm doing a research in uml models and ocl parsing, so different models or constraints have different elements with different datatypes and values.
Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82
BTW this is for academic non commercial purposes(i'm student, as you may noticed for the poor knowledge of the java api ), so i'm not "taking advantage of your knowledge", actually i'm doing this research pretty much solo(just me).
bart zagers
Ranch Hand

Joined: Feb 05, 2003
Posts: 234
I guessed that, that's why I asked some addtional questions.
It is just that the code you showed seems not very efficient and not very elegant, although it might work.
Depending on the content of the array, there are several improvements and simplifications possible.
For example take your last example and the line
arr[1][0]= 123 , arr[1][1] = int
what is now the type of arr[1][0] (you can check it for example by printing arr[1][0].getClass().getName() )?
It is most likely either a String, which case your conversion code could be simplified to

or the object already is an Integer object, in which case you don't even need the second column and the code becomes something like
Jorge Bendahan
Ranch Hand

Joined: Apr 11, 2008
Posts: 82

This cant work, here is an example: arr[i][0]= 12, arr[i][1]="short"
if you use the instanceof method with Integer i will return true.

But thanks for the responses anyway, this issue has been solved, now i have some new ones
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: exceptions and type casting confusion