我有一个名为myConstants的类,在其中我列出了所有常量,所以当我需要它时,我只引用MyConstants.MYCONSTANT。但是,我想为方法实现这样的东西。我重复了很多代码,例如,我在3个活动中有一个formatCalendarString(Calendar c)方法。似乎是多余的和不必要的。但是我不能让它们变成静态因为我得到静态调用非静态错误而我能想到的另一种方法就是创建一个MyConstant对象然后从该对象调用公共函数,就像这样......
MyConstants myConstants = new MyConstants();
myConstants.formatCalendarString(Calendar.getInstance());
有什么方法可以在MyConstants类中调用formatCalendarString()而不生成对象?
答案 0 :(得分:3)
您可以使用单例模式来缓存实例。将方法保留在父活动之类的内容没有任何意义(因为活动的主要作用是用户交互)。
示例:
MyUi
您只需要public class MyConstants {
private static MyConstants ourInstance;
private MyConstants() {
//private constructor to limit direct instantiation
}
public synchronized static MyConstants getInstance() {
//if null then only create instance
if (ourInstance ==null) {
ourInstance = new MyConstants();
}
//otherwise return cached instance
return ourInstance;
}
}
和private constructor
方法,只有public static
才能生成实例。
然后,拨打null
。它只会创建单个实例。
但是,在使用单身人士时,请保留memory leaks in mind。不要直接在单身内部传递活动背景。
答案 1 :(得分:0)
如果您想要在活动中拥有所有方法,那么您可以将其放在扩展BaseActivity
的抽象类Activity
中,然后使您的活动扩展为BaseActivity
。但是,如果这些方法与某些活动不对应,我建议使用一些Singleton或Util类
答案 2 :(得分:0)
我同意Pier Giorgio Misley。添加私有构造函数也很好,因为您显然不想实例化对象。
答案 3 :(得分:-1)
您可以使用Static
关键字。
静态方法可以从外部引用,而不会反映新对象。
只需创建一个类:
public class MyClassContainingMethods{
public static String MyStaticMethod(){
return "I am static!";
}
}
现在称之为
String res = MyClassContainingStaticMethods.MyStaticMethod();
希望这有帮助
注意强>
您 CAN 通过执行以下操作从静态调用非静态:
public static void First_function(Context context)
{
SMS sms = new SMS();
sms.Second_function(context);
}
public void Second_function(Context context)
{
Toast.makeText(context,"Hello",1).show(); // This i anable to display and cause crash
}
取自here的示例,您将无视其需要满足您的需求
答案 4 :(得分:-1)
你不能只使用父类吗?这样您就可以继承方法并在一个源中进行管理。那么你不必使用静态函数。
编辑:像Tomasz Czura所说,只需扩展Class。
public class ParentClass {
public void commonMethod(){ } }
公共类OtherClass扩展ParentClass { }