Java类间数据传递:类A调用类B方法失败求助
解决类A调用类B实例方法的问题
首先得明确:你定义的sendPlayerDataMethod()是实例方法(没有static修饰符),这类方法属于类的对象实例,而不是类本身,所以直接用ClassB.sendPlayerDataMethod()调用肯定行不通——IntelliJ识别不到很正常,因为它知道你不能这么用。
下面给你两种可行的解决思路:
思路1:创建类B的实例后调用方法
这是实例方法的标准调用方式,先new一个类B的对象,再通过对象调用方法。不过要注意原方法里的this上下文问题:
- 如果类B本身是
Activity或者其他Context子类(比如Service),那直接创建实例调用就行(不过Activity一般不建议手动new,最好通过Intent启动,但这里你的方法里已经有启动Activity的逻辑,可能类B是普通工具类?) - 如果类B是普通类,不是
Context子类,那原方法里的new Intent(this, ...)会报错,因为this不是合法的Context。这时候需要修改类B的方法,让它接收一个Context参数:
修改类B的方法:
public String sendPlayerDataMethod(Context context) { String testt = "thissss is for testing"; Intent sendPlayerData = new Intent(context, FullPlayerList.class); sendPlayerData.putExtra(Intent.EXTRA_TEXT, testt); // 如果是在非Activity的Context中启动Activity,需要添加这个标志 sendPlayerData.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(sendPlayerData); return testt; }
然后在类A中调用(假设类A是Activity,直接传this作为Context):
ClassB bInstance = new ClassB(); String result = bInstance.sendPlayerDataMethod(this);
思路2:把方法改成静态方法(如果适合你的业务场景)
如果你确实想通过ClassB.sendPlayerDataMethod()直接调用,可以把方法改成静态的,但同样要处理Context的问题,因为静态方法里不能直接用this:
修改类B的方法为静态:
public static String sendPlayerDataMethod(Context context) { String testt = "thissss is for testing"; Intent sendPlayerData = new Intent(context, FullPlayerList.class); sendPlayerData.putExtra(Intent.EXTRA_TEXT, testt); sendPlayerData.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(sendPlayerData); return testt; }
然后在类A中直接调用:
String result = ClassB.sendPlayerDataMethod(this);
额外注意事项
- 如果你在非Activity的Context中启动Activity(比如Application Context),一定要添加
FLAG_ACTIVITY_NEW_TASK标志,否则会抛出ActivityNotFoundException。 - 如果类B的构造函数有自定义参数,创建实例的时候要记得传入对应的参数哦。
内容的提问来源于stack exchange,提问作者user9523705
相关产品推荐
相关产品推荐

