java - 从抽象类调用非静态方法时遇到问题

标签 java android

我正在尝试从 SingleChoiceViewHolder.java 中的 SettingsItem.java 调用 getSetting()。有没有办法在保持 SettingsItem 为非静态抽象类的同时调用 getSetting() ?这是我尝试添加到 SingleChoiceViewHolder.java 中的内容,但是 Android Studio 说“SettingsItem”是抽象的;无法实例化。:

SettingsItem instance = new SettingsItem();
instance.getSetting();

IntSetting setting = (IntSetting) getSetting();
mTextSettingDescription.setText(setting.getValue());

我还尝试将 SettingsItem 转换为接口(interface)并与 SingleChoiceViewHolder 扩展了 SettingsViewHolder 一起实现它,但最初的问题仍然存在。

文件附在下面。

SingleChoiceViewHolder.java:

public final class SingleChoiceViewHolder extends SettingViewHolder
{
	private SingleChoiceSetting mItem;

	private TextView mTextSettingName;
	private TextView mTextSettingDescription;

	public SingleChoiceViewHolder(View itemView, SettingsAdapter adapter)
	{
		super(itemView, adapter);
	}

	@Override
	protected void findViews(View root)
	{
		mTextSettingName = (TextView) root.findViewById(R.id.text_setting_name);
		mTextSettingDescription = (TextView) root.findViewById(R.id.text_setting_description);
	}

	@Override
	public void bind(SettingsItem item)
	{
		mItem = (SingleChoiceSetting) item;

		mTextSettingName.setText(item.getNameId());

		if (item.getDescriptionId() == R.string.dynamic_descriptionId)
		{
			SettingsItem instance = new SettingsItem();
			instance.getSetting();

			IntSetting setting = (IntSetting) getSetting();
			mTextSettingDescription.setText(setting.getValue());
		}

		if (item.getDescriptionId() > 0 && item.getDescriptionId() != R.string.dynamic_descriptionId)
		{
			mTextSettingDescription.setText(item.getDescriptionId());
		}
	}

	@Override
	public void onClick(View clicked)
	{
		getAdapter().onSingleChoiceClick(mItem);
	}

SettingsItem.java:

public abstract class SettingsItem
{
	public static final int TYPE_HEADER = 0;
	public static final int TYPE_CHECKBOX = 1;
	public static final int TYPE_SINGLE_CHOICE = 2;
	public static final int TYPE_SLIDER = 3;
	public static final int TYPE_SUBMENU = 4;
	public static final int TYPE_INPUT_BINDING = 5;
	public static final int TYPE_RADIO_BUTTON = 6;

	private String mKey;
	private String mSection;
	private int mFile;

	private Setting mSetting;

	private int mNameId;
	private int mDescriptionId;

	public SettingsItem(String key, String section, int file, Setting setting, int nameId, int descriptionId)
	{
		mKey = key;
		mSection = section;
		mFile = file;
		mSetting = setting;
		mNameId = nameId;
		mDescriptionId = descriptionId;
	}

	public String getKey()
	{
		return mKey;
	}

	public String getSection()
	{
		return mSection;
	}

	public int getFile()
	{
		return mFile;
	}

	public Setting getSetting()
	{
		return mSetting;
	}

	public void setSetting(Setting setting)
	{
		mSetting = setting;
	}

	public int getNameId()
	{
		return mNameId;
	}

	public int getDescriptionId()
	{
		return mDescriptionId;
	}

	public abstract int getType();
}

最佳答案

由于 getSetting() 不是静态方法,因此您需要在扩展抽象类 SettingsItem 的某个具体类的实例上调用它。

想一想。如果您有这样一个类的两个实例,并且这两个实例的 mSetting 变量不同,那么应该从对 getSetting() 的静态调用中返回哪一个实例?

关于java - 从抽象类调用非静态方法时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50843891/

相关文章:

Java - 类和方法的问题

java - 如何在不同分辨率下获取同一位置的鼠标位置

java - 正则表达式 - 组值替换

android - Android Froyo (2.2) 的 shouldInterceptRequest 等效项

android - NDK 无法识别某些头文件,例如 <mutex> 和 <future>

java - Android 运行时字节码操作

java - SpringMVC RestEasy Integration Bean 未注入(inject)到 Controller 类中

java - 为什么 gson.toJSon 时返回空对象

android - 如果对 RxJava 主题进行了 onComplete 调用,我是否必须再次手动取消订阅?

java - 无法从命令行创建 AVD;消息显示未找到 java.se.ee