Часто делается подкласс класса приложения, который гарантированно имеет только один экземпляр.
Подкласс приложения:
public class MyApplication extends Application {
private static Context mContext;
@Override
public void onCreate(){
super.onCreate();
mContext = this;
}
public static Context getContext(){
return mContext;
}
}
Ваш класс:
public String compassOrdinalForBearing(float bearing) {
Context context = MyApplication.getContext();
String north = context.getResources().getString(R.string.compass_ordinal_north);)
}
Но не забудьте изменить манифест:
<application android:name="com.example.myapp.MyApplication">
В качестве альтернативы вы можете просто передать контекст во время создания экземпляра, не сохраняя указатель на него, так как почти наверняка эти объекты будут созданы из контекста,
private Static string NORTH = null;
public MyClass(Context context){
initializeDirections(context);
}
private static void initializeDirections(Context context){
if(NORTH == null){
NORTH = context.getResources().getString(R.string.compass_ordinal_north);
}
}
Наконец, это некая грязная комбинация двух на тот случай, если вы действительно не можете передать контекст при создании экземпляра и не хотите сохранять контекст приложения в подклассе Application:
public class MyApplication extends Application {
@Override
public void onCreate(){
super.onCreate();
MyClass.initializeDirections(this);
}
}
public class MyClass{
private static String NORTH = null;
public static final void initializeDirections(Context context){
NORTH = context.getResources().getString(R.string.compass_ordinal_north);
}
}
Редактировать: На несвязанной ноте, по крайней мере, только из этого единственного фрагмента, вы можете убить все первые условные выражения.Если он достиг этого конкретного «иного», первое условие обязательно будет верным.
Например:
else if ((bearing >= 0) && (bearing <= 22.5))
return "North";
else if ((bearing > 22.5) && (bearing <= 67.5))
return "Northeast";
Может быть:
else if (bearing <= 22.5)
return "North";
else if (bearing <= 67.5)
return "Northeast";
Как если бы bearing
было! <= 22,5, оно обязательно> 22,5.
Это может или не может улучшить читаемость для вас и может или не может быть желательным для вас.Просто некоторые, вероятно, нежелательные два цента:)