如何将 java 类名作为参数传递并将其用作方法中的强制转换
Posted
技术标签:
【中文标题】如何将 java 类名作为参数传递并将其用作方法中的强制转换【英文标题】:How to pass a java class name as parameter and use it as casting in method 【发布时间】:2021-01-17 20:19:57 【问题描述】:我正在尝试实现每个活动都可以调用它的通用对话框方法。公共静态方法应该是这样的。但是我无法将 mContent 转换为其活动类名称。
public static void openDialogEntry(Class activityClassName, Context mContext, String title, ... )
Dialog_Entries dialog = new Dialog_Entries( title, ... );
dialog.show( ((activityClassName) mContext).getSupportFragmentManager(), tag);
我想从任何活动的片段中调用此方法,例如从 SecondActivity.java 的片段(视图)中使用
openDialogEntry(view.getContext().getClass, view.getContext(), title, ... ) ;
我期望做的是在 openDialogEntry 方法中执行类似下一行的操作
dialog.show( ((SecondActivity) mContext).getSupportFragmentManager(), tag);
((activityClassName) mContext)
似乎不起作用。
我也想从 MainActivity.java 和 ThirdActivity.java 调用公共静态方法(以及它们需要转换的片段)。
如何实现这个目标?
【问题讨论】:
如果 Context 已经有一个 getSupportFragmentManager 方法,则强制转换实际上没有任何效果。 如果我从 SecondActivity 的片段中调用方法呢?我需要将其转换为访问 getSupportFragmentManager()。 对不起。我从 SecondActivity 的片段中调用该方法。问题已更改以使其清楚。 请显示所有相关代码以避免这个乒乓球。 你想调用静态方法吗?所以 mContext 在这方面真的没有任何用处。你有Class,然后通过反射获取方法并调用它。 【参考方案1】:类有一个方法Class.cast(Object)
,你可以这样做:
public static void openDialogEntry(Class<? extends Context> activityClassName, Context mContext, String title, ...)
Dialog_Entries dialog = new Dialog_Entries(title, ...);
dialog.show(activityClassName.cast(mContext).getSupportFragmentManager(), tag);
请注意,cast
仅在提供有关 Class
参数的通用信息时才有意义
但是正如@Zabuzard 已经提到的那样。这没有多大意义。如果可以将mContext
转换为activityClassName
为什么不使用这个类而不是Context
作为方法参数?
Context
可能实现了一些interface
或扩展了一些提供getSupportFragmentManager
方法的class
。所以根本不需要投射。
【讨论】:
他们也试图通过实例调用静态方法。他们已经确定演员阵容是实现这一目标的一种方式。 @matt 我在Class
参数中添加了泛型。 openDialogEntry
是静态方法,但 getSupportFragmentManager
不是。而openDialogEntry
不属于Context
。至少我找不到这个信息。
"getSupportFragmentManager is not" 你怎么知道的?然后他们甚至不需要演员,只需接受参数作为上下文。
@matt 我知道。 SoF... 为什么你认为getSupportFragmentManager
是静态的?
他们最后的声明中说“我想调用公共静态...”以上是关于如何将 java 类名作为参数传递并将其用作方法中的强制转换的主要内容,如果未能解决你的问题,请参考以下文章
如何读取将作为 MultipartFile 参数传递的 SQLite 文件? (在 java/kotlin 中)
如何传递参数并将这些参数用作 package.json 脚本中的变量? [复制]
如何在 C# 中将 DLLImport 与结构一起用作参数?