Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Java Java Annotations Writing Your Own Annotation Putting It All Together

Andrew Stevens
Andrew Stevens
4,926 Points

Where am I going wrong?

For the life of me I can't figure out why I am receiving error cannot find symbol Method[].

Please see my code attached, where am I going wrong and what am I failing to understand here?

public class TestAnalyzer {
  /**
   *  Counts the number of methods in the class given by `clazz` that have been annotated
   *  with the @Test annotation.
   */
  public static int getNumAnnotatedMethods(Class<?> clazz) {
    int count = 0;
    Method[] method = clazz.getDeclaredMethods();
    for (Method methods : method) {
      if (methods.annotationIsPresent()) {
        count = count + 1; 
      }
    }
    return count;  
  }
}

2 Answers

Steven Parker
Steven Parker
216,810 Points

Did you notice the message when you ran the test? It contains a hint:

Bummer: Oops, there is a compiler error! Don't forget to add import statements for any outside classes you're using.

So try adding import java.lang.reflect.Method; at the top.

Also, there's a couple other issues:

  • instead of "annotationIsPresent", did you mean to write "isAnnotationPresent"?
  • isAnnotationPresent requires an argument

There are several reasons for this error message. In this particular instance, it means that Method[] is referring to the Method class. Given the code example above, the compiler doesn't know what that is.

There are some Java classes that are just available to you in the standard packages. Method is not one of them. You will need to tell the compiler that in this file, you want to use classes that are found in the reflect package:

import java.lang.reflect.*;

With that statement at the top of your file, Java will know that everything (that's what the * does) in the reflect package should be available to code in this file. If you receive this error again, you can look up in the Java lang docs in which package you can find this class.

A lot of IDEs will also give you a list of possible packages you could import that contain a class that matches what you're asking to use and allow you to import them.