I\'m developing an Android application and I\'m very new on Java and Android.
I want to create some constants to use in some activities. Where can I define these con
Normally, you'd use a Constants class, or define them in classes where they are used, a la:
class Constants {
public static final int NUM_TRIANGLES = 4;
public static final String SOME_TEXT = "This is a constant";
}
Then you'd refer to them by:
String inst = Constants.SOME_TEXT;
The most common way is to create 'constants' in the classes were you need them:
class Example {
private static final int FILENAME = "test.txt;
}
Instead of private it can also be declared default, protected or public. Although it is considered an OO anti pattern to define constants is a special 'constants' (God) class that stores constants for the whole application. Alternatively, you can also store configuration data in a Java properties file, this is not considered an anti-pattern.
Another option, that is rapidly gaining popularity, is the usage of the Dependency Inject (DI) pattern. Often this pattern is used for depend object, but it can also be used to inject constant values into objects. This can for example be implemented with Google's lightweight Guice DI framework:
class Example {
String filename;
@Inject
public Example(@ConfigFilename String filename) {
this.filename = filename;
}
In a special Binder class you will bind a value to the Strings annotated with @ConfigFilename. This way, you have minimal coupling and classes that can be independently tested.
You can define some constants in Java enumerations.
A single Java enumerator may hold multiple fields of associated data.
Oracle provides this introduction to Java enumerations.
It's considered bad practice in java, and most OO languages, to define a class simply to hold constants. It's much better to define the constants in a class they are associated with. Usually there is one. e.g.
interface MyComponent {
/** The default height for a component */
public static final int DEFAULT_HEIGHT = 5;
// other stuff
}
If there really isn't one feel free to define a separate class.
EDIT:The key things here are: