cannot find symbol?

Q

qwertmonkey

Basically I am passing a String array to a method (verify) defined in a
generic way in an interface in order to create an object of a certain type

I am checking that the object of the correct type is created but when I try
to call a method java tells me "cannot find symbol"

I squinted at it for a while, but can't see what is wrong with it

What is wrong with this code? How do you fix that problem? Does it relate
to the use of generic declarations and/or reflection?

thanks,
lbrtchx
comp.lang.java.programmer: cannot find symbol?

// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

import java.util.Date;

import java.io.IOException;

import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

// __ mock/test object
class IADObj{
private int d;
private String aS;
private Date Dt;
// __
IADObj(){}
// __
public void setCtxt(int d, String aS, long lTm){
this.d = d;
this.aS = aS;
this.Dt = new Date(lTm);
}
// __
public String toString(){ return("// __ d: |" + d + "|, aS: |" + aS +
"|, Dt: |" + Dt + "|"); }
}


// __
interface verifiableCLIContext06<T_Ctxt>{
public boolean verifyCtxt(String[] aSArs, Class<? extends T_Ctxt> TpArgK);
public T_Ctxt getCtxtDTO();
}

// __
class DTO_T_Ctxt06<T_Ctxt> implements verifiableCLIContext06<T_Ctxt> {
private T_Ctxt tCtxt; // operating context

// __
DTO_T_Ctxt06(){ System.err.println("// __ object created: |" +
getTimeStamp() + "|"); }

// __
private String getTimeStamp(){ return((new Date()).toString()); }

// __
public boolean verifyCtxt(String[] aSAr, Class<? extends T_Ctxt> TpArgK){
int iArSz= Integer.MIN_VALUE;
boolean Is = ((aSAr != null) && ((iArSz = aSAr.length) > 0));
if(Is){
for(int i = 0; (i < iArSz); ++i){
System.err.println("// __ aSAr[" + i + "]: |" + aSAr + "|");
}
// __
try{
tCtxt = (T_Ctxt)TpArgK.newInstance();

System.err.println("// __ tCtxt.getClass(): |" + tCtxt.getClass() + "|");

/*
tCtxt.setCtxt((new Integer(aSAr[0])).intValue(), aSAr[1],
(new Long(aSAr[0])).longValue());

cannot find symbol
symbol : method setCtxt(int,java.lang.String,long)
location: class java.lang.Object
tCtxt.setCtxt((new Integer(aSAr[0])).intValue(), aSAr[1],
(new Long(aSAr[0])).longValue());
^
*/

}catch(InstantiationException InstX){ InstX.printStackTrace(System.err); }
catch(IllegalAccessException IlglAxX){ IlglAxX.printStackTrace(); }
}// (Is)
// __
return(Is);
}

// __
public T_Ctxt getCtxtDTO(){ return(tCtxt); }
}

// __
public class DTO_T_Ctxt06Test{

public static void main(String[] args) {
IADObj IAD = new IADObj();
String[] aSAr = new String[]{"37", "abc", (new Date()).toString()};

DTO_T_Ctxt06<IADObj> DTO_T_Ctxt06 = new DTO_T_Ctxt06<IADObj>();

DTO_T_Ctxt06.verifyCtxt(aSAr, IAD.getClass());
}
}
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
 
D

Daniel Pitts

Basically I am passing a String array to a method (verify) defined in a
generic way in an interface in order to create an object of a certain type

I am checking that the object of the correct type is created but when I try
to call a method java tells me "cannot find symbol"

I squinted at it for a while, but can't see what is wrong with it

What is wrong with this code? How do you fix that problem? Does it relate
to the use of generic declarations and/or reflection?

thanks,
lbrtchx
comp.lang.java.programmer: cannot find symbol?

// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

import java.util.Date;

import java.io.IOException;

import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

// __ mock/test object
class IADObj{
private int d;
private String aS;
private Date Dt;
// __
IADObj(){}
// __
public void setCtxt(int d, String aS, long lTm){
this.d = d;
this.aS = aS;
this.Dt = new Date(lTm);
}
// __
public String toString(){ return("// __ d: |" + d + "|, aS: |" + aS +
"|, Dt: |" + Dt + "|"); }
}


// __
interface verifiableCLIContext06<T_Ctxt>{
public boolean verifyCtxt(String[] aSArs, Class<? extends T_Ctxt> TpArgK);
public T_Ctxt getCtxtDTO();
}

// __
class DTO_T_Ctxt06<T_Ctxt> implements verifiableCLIContext06<T_Ctxt> {
private T_Ctxt tCtxt; // operating context

// __
DTO_T_Ctxt06(){ System.err.println("// __ object created: |" +
getTimeStamp() + "|"); }

// __
private String getTimeStamp(){ return((new Date()).toString()); }

// __
public boolean verifyCtxt(String[] aSAr, Class<? extends T_Ctxt> TpArgK){
int iArSz= Integer.MIN_VALUE;
boolean Is = ((aSAr != null) && ((iArSz = aSAr.length) > 0));
if(Is){
for(int i = 0; (i < iArSz); ++i){
System.err.println("// __ aSAr[" + i + "]: |" + aSAr + "|");
}
// __
try{
tCtxt = (T_Ctxt)TpArgK.newInstance();

System.err.println("// __ tCtxt.getClass(): |" + tCtxt.getClass() + "|");

/*
tCtxt.setCtxt((new Integer(aSAr[0])).intValue(), aSAr[1],
(new Long(aSAr[0])).longValue());

cannot find symbol
symbol : method setCtxt(int,java.lang.String,long)
location: class java.lang.Object
tCtxt.setCtxt((new Integer(aSAr[0])).intValue(), aSAr[1],
(new Long(aSAr[0])).longValue());
^
*/

}catch(InstantiationException InstX){ InstX.printStackTrace(System.err); }
catch(IllegalAccessException IlglAxX){ IlglAxX.printStackTrace(); }
}// (Is)
// __
return(Is);
}

// __
public T_Ctxt getCtxtDTO(){ return(tCtxt); }
}

// __
public class DTO_T_Ctxt06Test{

public static void main(String[] args) {
IADObj IAD = new IADObj();
String[] aSAr = new String[]{"37", "abc", (new Date()).toString()};

DTO_T_Ctxt06<IADObj> DTO_T_Ctxt06 = new DTO_T_Ctxt06<IADObj>();

DTO_T_Ctxt06.verifyCtxt(aSAr, IAD.getClass());
}
}
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~



Try reducing your problem to an SSCCE <http://sscce.org>. It is
difficult to follow those poorly named mock classes and interfaces.

On an unrelated note, what the hell convention is that? DTO? T_? Hell,
underscores in class names? This looks like it was copied from C++ code
which was copied from C code.

Actually, now that I say that, are you expecting generics to work like
templates in C++? They don't.

The DTO_T_Ctxt06 object (which has the same name as the class, bad and
confusing) only knows about the "?". It doesn't know about the specific
subclass you've chosen.

What you want is an interface.

public interface ContextAware {
void setContext(int data, String string, long time);
}

public class Adjective implements ContextAware {
private int data;
private String string;
private Date date;
public void setContext(int data, String string, long time) {
this.data = data;
this.string = string;
this.date = new Date(time);
}
}

public class ContextVerifier {
public verifyContext(String[] strings, ContextAware target) {
target.setContext(
Integer.parseInt(strings[0]),
strings[1],
Long.parseLong(strings[2]);
}
}


public class Test {
public static void main(String...args) {
final String[] args = {
"37",
"abc",
String.valueOf(System.currentTimeMillies())
};

final ContextVerifier cv = new ContextVerifier();
cv.verifyContext(args, new Adjective();
}
}

Well, would you look at that. You no longer have to deal with Class
tokens, instantiation, exceptions, or generics! A much cleaner program.
Untested, but the main concept should be clear.

Hope this helps,
Daniel.
 
J

Joerg Meier

Firstly, looking at this code gave me a headache :-(

qwertmonkey has been told many times, but like Stefan Ram, he ignores all
posts relating to his horrid coding style, and since people still help him,
he probably just sees no need.

Liebe Gruesse,
Joerg
 
E

Eric Sosman

qwertmonkey has been told many times, but like Stefan Ram, he ignores all
posts relating to his horrid coding style, and since people still help him,
he probably just sees no need.

What he may not know is that while some people help him,
others don't. I, for example, started to read his code but
found it so gratuitously ugly that after half a minute I said
"Ick" and quit. Whatever help he might have gotten from me
will forever remain a mystery, because I've got better things
to do. My eyebrows don't pluck themselves, you know.
 
S

Stefan Ram

location: class java.lang.Object
tCtxt.setCtxt((new Integer(aSAr[0])).intValue(), aSAr[1],
(new Long(aSAr[0])).longValue());
^

Go ahead and look at the declaration of »tCtxt«.

You will find the that it effectively was declared as
»java.lang.Object«.

»java.lang.Object« has no method name »setCtxt«.
 
S

Stefan Ram

class DTO_T_Ctxt06<T_Ctxt> implements verifiableCLIContext06<T_Ctxt> {
private T_Ctxt tCtxt; // operating context
System.err.println("// __ tCtxt.getClass(): |" + tCtxt.getClass() + "|");

It boils down to this.

»T_Ctxt« is effectively »java.lang.Object«, since the
compiler does not know a more specific type to apply.
 
A

Arne Vajhøj

qwertmonkey has been told many times, but like Stefan Ram, he ignores all
posts relating to his horrid coding style, and since people still help him,
he probably just sees no need.

I see some difference.

This is coding C++ in Java. Both design and formatting. And this
is pretty bad - as it almost always is to try and code X in Y.

Stefans code is normal designed. The only problem is that
it it gets formatted after the "Stefan Java coding convention",
which deviate a lot from more standard Java coding conventions
including the official one from SUN/Oracle.

That is also a annoying, but not quite as much.

(and I don't understand why he doesn't write the code
in his style but 15 seconds before posting copy paste
it over in a new doc, ask the IDE to reformat it and
post the result)

Arne
 
M

markspace

(and I don't understand why he doesn't write the code
in his style but 15 seconds before posting copy paste
it over in a new doc, ask the IDE to reformat it and
post the result)

I have two different coding styles that my editor (NetBeans) supports.
One with more white space which is normal, and one with less white space
for posting. It's easy to switch between them. (Well, currently I have
to switch projects to do that, but that's not a burden usually.)

I don't see why code can't be formatted for its intended audience either.
 
R

Robert Klemme

qwertmonkey has been told many times, but like Stefan Ram, he ignores all
posts relating to his horrid coding style, and since people still help him,
he probably just sees no need.

What I find probably more annoying is his ripping apart of threads.
With such high traffic as here it becomes quite tedious quickly to dig
up all the branches of a single thread.

Cheers

robert
 
A

Arved Sandstrom

What he may not know is that while some people help him,
others don't. I, for example, started to read his code but
found it so gratuitously ugly that after half a minute I said
"Ick" and quit. Whatever help he might have gotten from me
will forever remain a mystery, because I've got better things
to do. My eyebrows don't pluck themselves, you know.
You lasted 30 seconds, Eric? :)

The first thing I do with a NG problem that involves code is very
quickly scan it for readability, w/o even trying to understand the code
proper. So whitespace, indentation, general naming etc. In this case I
gave up in less than 10 seconds and read follow-ups to see if anyone
actually tried to help. :)

AHS
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,038
Messages
2,570,372
Members
47,018
Latest member
IrisN51866

Latest Threads

Top