about the Object reference

J

jtl.zheng

I have write a stack which have interfaces:

------- public void push(Object o);
------- public Object pop();

then I can push any type class object into the stack
and when I pop() one element I can use:

------- Object o=pop();
------- o.getClass();

to determine this element o belong to what class
(eg. if it's String it return "class java.lang.String")

my question is when I know this o is a String Object
how can I use its String interface
something like:

------- Object o=pop();
------- String s=o; // can't compiled here
// java.lang.Object, required:
java.lang.String
------- System.out.println(s.charAt(n)); // use the String
interface

I know this o is point to a String object
how can I use this o's String interface (to get something like
o.charAt(n)) ?

Thank you very much in advance
 
L

Lionel

jtl.zheng said:
I have write a stack which have interfaces:

------- public void push(Object o);
------- public Object pop();

then I can push any type class object into the stack
and when I pop() one element I can use:

------- Object o=pop();
------- o.getClass();

to determine this element o belong to what class
(eg. if it's String it return "class java.lang.String")

my question is when I know this o is a String Object
how can I use its String interface
something like:

------- Object o=pop();
------- String s=o; // can't compiled here
// java.lang.Object, required:
java.lang.String
------- System.out.println(s.charAt(n)); // use the String
interface

I know this o is point to a String object
how can I use this o's String interface (to get something like
o.charAt(n)) ?

String s = (String)o;

Lionel.
 
M

Martin Lansler

You can check if an object is of a certain type using 'instanceof'.

if (o instanceof String) {
String s = (String) o;
}

however it would be better if you designed the Stack with generics.

/**
* A stack
* @param <T> the generic type
*/
public interface Stack<T> {
/**
* Push an object onto the stack
* @param t the object
*/
void push(T t);

/**
* @return pop an object from the stack
*/
T pop();
}


A simple implementation used a linked list:

import java.util.LinkedList;

/**
* Implementation of Stack
*/
public class StackImpl<T> implements Stack<T> {
private LinkedList<T> list = new LinkedList<T>();

/**
* {@inheritDoc}
*/
public T pop() {
return list.removeLast();
}

/**
* {@inheritDoc}
*/
public void push(T t) {
list.addLast(t);
}
}


Example usage:

public class StackTest {
public static void main(String[] args) {
Stack<String> stack = new StackImpl<String>();
stack.push("hi");
stack.push("joe");
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}


Cheers,
Martin.
 
J

jtl.zheng

---- String s = (String)o;

---- if (o instanceof String) {
---- String s = (String) o;
---- }

Thank you very much
It work out now

to Martin Lansler
I have not learn generics yet
but I will learn it soon
Thanks for your codes
: )
 

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
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top