Solved

new array using reflection

Posted on 2006-11-09
7
355 Views
Last Modified: 2012-06-21
Java generics don't allow me to do something like:

public static <T> void doStuff(T obj) {
    T[] arr = new T[5];
    // ...
}

It won't let me create the array of type T.

So, is it possible to create a new array of type T using reflection? Is there a method like to
    T.class.newInstance()
which will create an array of T?
0
Comment
Question by:HappyEngineer
7 Comments
 
LVL 13

Expert Comment

by:marchent
ID: 17911907
u can use Object, which is parent of all java classes for generalize a data type

public static Object void doStuff(Object obj) {
    Object []arr = new Object[5];
    // ...
}

when u need to convert
String str = (String)obj; //convert into String
Integer i = (Integer)obj; //convert into Integer
but u have to make sure, that the object is actually belongs to String/Integer class

~marchent~
0
 
LVL 92

Expert Comment

by:objects
ID: 17911989
Object array = Array.newInstance(T.class, 10);
0
 

Author Comment

by:HappyEngineer
ID: 17912073
objects, that almost works, but T.class apparently isn't legal.

It says: "Illegal class literal for the type parameter T"
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 
LVL 92

Expert Comment

by:objects
ID: 17912092
sorry, thought T was a class name, not a parameter.
0
 
LVL 92

Accepted Solution

by:
objects earned 250 total points
ID: 17912104
what about:

Object array = Array.newInstance(obj.getClass(), 10);
0
 
LVL 23

Assisted Solution

by:Ajay-Singh
Ajay-Singh earned 250 total points
ID: 17912182
try this:


T[] arr = (T[]) new Object[5];
0
 

Author Comment

by:HappyEngineer
ID: 17973888
The casing of the array works at compile time but breaks at run time.

I can't call obj.getClass() because in this particular case I don't actually have an object to call getClass() on.

Never mind, I've worked around it. Thanks anyway!
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question