Re: Create an Object from an Array Class



Z wrote:
On Oct 30, 5:53 pm, Joshua Cranmer <Pidgeo...@xxxxxxxxxxxxxxx> wrote:
Z wrote:
I am using reflection to getmethod(methodName, Class parameters) and
invoke(object, obj[] parameters) methods from some Objects.
My problem is:
Say: I want to invoke a method that takes String[] object as parameter
(I was able to getmethod correctly). When I try to create an object
(to pass as args to invoke):
Object someObject= (Object) String[].class.newInstance();
(Note that the object is not always an instance of String[]... it
could be an instance of SomeOtherClass[])
RTFM:
[ From Class.newInstance(): ]
Throws:
[ ... ]
InstantiationException - if this Class represents an abstract
class, an interface, an array class, a primitive type, or void; or if
the class has no nullary constructor; or if the instantiation fails for
some other reason.
[ ... ]

Arrays cannot be created with a new instance, because they are a
special-case class.

My question is:
Does the "[L" at the beginning and the ";" at the end have a meaning?
Yes, this is the internal representation of the class (it means that
this is an array of java.lang.String's).

How can I solve this problem?
What you are probable intending is something like this:

Method m = Class.forName("some.pkg.Type").getMethod("main",
String[].class);
m.invoke(null, new String[0]);

I am using IntelliJ 6.0.5.
Java version matters, not IDE version.

--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth
Thanks for the clarifications. I hope that my phrasing of the question
shows where I am stuck.

What I am intending to do is:

//here is how my program is flowing

String className = namesOfAllClasses[j]; //I have it coming through a
loop

Class class1 = Class.forName(className);

Fields fields = class1.getDeclaredFields(); //assuming that all fields
are Class type (not primitive)

for (int i=0; i < fields.length; i++) {
Class newClass = Class.forName(fields[i].getType().getName()); //
create a class of the field type
Object newObject = newClass.newInstance(); //create an object of
the new field type
Method m = newClass.getMethod(methodName, newClass); /*get method;
we can assume it's "set"+fields[i].getName()*/
Object arguments[] = {"dummy"};
m.invoke(newObject, arguments);
}

/*
When a field is someClass[], I am facing troubles since now the
fields[i].getType().getName() = L[some.pkg.name.someClass;
In this case:
Class newClass = Class.forName(fields[i].getType().getName()) is
returning with a result (no exceptions)

But using the newInstance is generating exceptions since it's a
special-case class as you explained.

You have used
m.invoke(null, new String[0]); //it gave me back a
nullPointerRxception even though it's a static method

My problem is that the second parameter in invoke does not have to be
a String type for the parameter object but is an object instance of
the L[some.pkg.name.someClass; (object array)

Example: This method looks like this in ClassName.java

public void setsomeObjectProperty(some.pkg.name.someClass[]
someObjectProperty) {
this.someObjectProperty= someObjectProperty;
}

Any tips?
*/

Thanks again for your time

First, please don't top-post. Reply after the bottom or interleaved.

Second, Don't look for set+name or get+name methods. Use the introspection API. (java.beans.*). There is more to JavaBeans than just a naming convention.

Also, ask yourself if you REALLY need to use reflection/introspection at all. I wrote an article about it on my blog sometime last year <http://virtualinfinity.net/wordpress/>

I'll post the exact link when I have a chance to look it up.

--
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>
.



Relevant Pages

  • Re: Create an Object from an Array Class
    ... invoke(object, objparameters) methods from some Objects. ... I want to invoke a method that takes String[] object as parameter ... this is the internal representation of the class (it means that this is an array of java.lang.String's). ...
    (comp.lang.java.programmer)
  • =?iso-8859-1?q?Re:_Invoke_und_Threads,_die_die_GUI_ver=E4ndern?=
    ... //Delegate mit einem ObjectArrray und einem String als Parameter ... //ObjectArray Erstellung, wobei auf bereits vorhandenes WTGrenzen Array ... //Aufruf der Invoke Methode ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Re: ouvrir un document word =?ISO-8859-1?Q?=E0_partir_d=27un?= =?ISO-8859-1?Q?_progr
    ... invoke theDocument "getParagraphs" returning theParagraphs ... move String1 to ws-SendText ... *> The final string is converted to an object if required ... depending on ls-OUT-Length pic x. ...
    (comp.lang.cobol)
  • Re: Threading on Functions returning values
    ... People like you are very Important for this forum. ... delegate string MyDelegate; ... the delegate returns a value, so too does the Invoke() method. ...
    (microsoft.public.dotnet.framework)
  • Strange error validating XML against XSD
    ... This method has one parameter (string your_data). ... value that this parameter will actually have is the content of a XML ... invokes my web method and it fails exactly when the XSD is performed. ... But when these guys invoke the method, ...
    (microsoft.public.dotnet.xml)