gpt4 book ai didi

java - 将子类传递给新类后如何最好地获取子类的名称?

转载 作者:行者123 更新时间:2023-12-01 19:06:36 25 4
gpt4 key购买 nike

我有两个 ListActivity 类,我想将它们传递给第三个类,如下所示。原因是我在旧 Android 版本的一项 Activity 中使用已弃用的 android.text.ClipboardManager,而在另一项 Activity 中使用较新的 android.content.ClipboardManager。它们以不同的方式使用,需要分开。

Activity 1

import android.content.ClipboardManager;

public class Activity1 extends ListActivity {
ThirdClass tc = new ThirdClass(this);
}

Activity 2

import android.text.ClipboardManager; <--- different

public class Activity2 extends ListActivity {
ThirdClass tc = new ThirdClass(this);
}

三等

public class ThirdClass {

public ThirdClass (ListActivity la){
//do stuff
}

//other methods
}

在第三个类中,我希望有用于两个 ListActivity 类的共享代码。但是,第三个类需要能够判断它是与 Activity1 还是 Activity2 一起使用,以便它可以使用这些类中定义的特定变量和方法。这可以通过像这样转换类名来完成:

((Activity1) la).whatever

我的问题是,使用已传递到 ThirdClass 的 ListActivity 变量“la”中的代码检索类名 Activity1 或 Activity2 的最简单方法是什么?

我能够弄清楚自己的唯一方法是使用 getClass() 和 getName(),然后使用 if 语句,如下所示。

String activity = la.getClass().getName();

if (activity == com.stuff.Activity1) {
//do stuff
}

但是必须有更好的方法,以便我可以使用“la”变量将类名直接转换为任何内容?

更新

使用instanceof会导致大量重复代码,因为我必须为每个实例编写一次,如下所示。我希望能够避免这种情况。

if (la instanceof Activity1) {
((Activity1) la).whatever
}

if (la instanceof Activity2) {
((Activity2) la).whatever
}

使用包含 Stefan 建议的所需方法的接口(interface)可能是个好主意?其实我对接口(interface)不太了解,所以没有考虑这个。我会调查一下。

最佳答案

使用以下实例进行操作:

if (la instanceof Activity1)

这是检查某物是否是特定类的实例的 java 方法。

编辑这个问题再次证明与最初的陈述完全不同。您面临着 Strategy design 的经典形式模式 - 网上有很多来源,我链接到了维基百科。基本上,这是一种设计模式,允许您根据情况选择要使用的算法。正是你的情况。在我链接的文章中,有一个非常简单的示例。

对于学习设计模式的基础知识我肯定会推荐the book四人帮的。大家都知道。

关于java - 将子类传递给新类后如何最好地获取子类的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com