0





59

Advertisement

1

I saw this sample code:

public class Main{ 
    public static void main(String[] args){
        Pocket<Object> pocket = new Pocket<Object>;
        System.out.println("test");
        pocket.put(new Object(){
            String field;
            void inner(){
               ...
            }
        });
    }  
}

Anonymous-classes doesn't have a class name. So I thought "How do I call anonymous class in any time?" while I'm reading this code.

As per title, Can I call methods of anonymous classes in any time? If I can, how do I call?

PostScript

Object is java.lang.Object.

Question author Sunsolararrow | Source

Advertisement


0


1

In Java, anonymous classes are meant for providing implementations for a class within a method (or a block of code).

However, they make the code harder to read/maintain because of their verbosity.

For example, if you have an interface like Product as below:

public interface Product {
  void display();
}

In some other class, you can implement the Product interface as follows:

public class Test {

  public void static main(String[] args) {

     Product product = new Product() {

            @Override
            public void display() {
                //add your code to display

            }
        };

    //now using reference, you can call display()
    product.display();
}

}

Now, coming to your code, you can override java.lang.Object methods as shown below:

pocket.put(new Object(){

            @Override
             public String toString() {
                 return "My Object String";
             }

             //You can override other methods of java.lang.Object

             //note that, because your reference type is java.lang.Object, 
             //so you will NOT be able to call inner(), 
             // 'field' members even if you add them here
        });

Can I call methods of anonymous classes in any time? If I can, how do I call?

You need the reference to call the methods/members (as like any other object inocation) implemented through anonymous class so, product.display();will invoke the display() method. Or in your case, you can call like pocket.get(i).toString() or any methods of java.lang.Object

As a side note, remember that, in Java8, you can replace Anonymous classes with Lambda expressions provided you have only one abstract method to implement.

Answer author Javaguy

Ask about this question here!