Java 从类型参数扩展
我试图创建一个泛型基类,但得到“无法从其类型参数错误扩展” 这是我的班级:Java 从类型参数扩展,java,android,inheritance,extends,Java,Android,Inheritance,Extends,我试图创建一个泛型基类,但得到“无法从其类型参数错误扩展” 这是我的班级: package com.akturk.bella.activity; import android.app.Activity; import android.os.Bundle; import android.support.annotation.LayoutRes; import android.support.v4.app.FragmentActivity; abstract class BaseActivity
package com.akturk.bella.activity;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.v4.app.FragmentActivity;
abstract class BaseActivity<E extends Activity> extends E {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentView());
}
@Override
public void onContentChanged() {
super.onContentChanged();
ButterKnife.inject(this);
}
protected abstract
@LayoutRes
int getContentView();
}
package com.akturk.bella.activity;
导入android.app.Activity;
导入android.os.Bundle;
导入android.support.annotation.LayoutRes;
导入android.support.v4.app.FragmentActivity;
抽象类BaseActivity扩展了E{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(getContentView());
}
@凌驾
内容更改时的公共无效(){
super.onContentChanged();
注射(这个);
}
受保护摘要
@布局
int getContentView();
}
我要做的是传递一个类参数来扩展另一个类的基类,比如FragmentActivity或ListActivity或其他扩展Activity的类
我怎样才能实现我的目标
编辑:
我想要一个像这样的用法
公共类测试活动扩展了BaseActivity
或
公共类测试活动扩展了BaseActivity
通过这样做,我将能够使用ListActivity或FragmentActivity的特殊方法,如getListView()或getSupportedFragmentManager()我认为使用子类型无法实现您想要的功能。首先,Java从一开始就不支持泛型。为了保持向后兼容,泛型类型在运行时被擦除,因此在您的情况下,动态地,每个
E
实例都被Activity
替换,即使您实例化了BaseActivity
但是,您可以尝试使用组合实现类似的效果
abstract class BaseActivity<E extends Activity> {
public E activity;
public BaseActivity(E activity){
this.activity = activity;
}
// ...
}
编辑:事实上,如果您想要实现的目标实际可行,还有一个更根本的问题:
class Cat<A> extends A {
String eat(){ return "Cat is eating"; }
}
class Dog {
void eat(){ System.out.println("Dog is eating"); }
}
类Cat扩展了{
字符串eat(){返回“猫正在吃”;}
}
班犬{
void eat(){System.out.println(“狗在吃”);}
}
如果调用(new Cat()).eat()会发生什么代码>Cat
没有覆盖eat
,因为签名不匹配
Edit2:此外,如果泛型超类不提供默认构造函数,则无法实例化它 看起来您想扩展
活动
,而不是E
。泛型用于允许类定义泛型类型的值,这似乎不是您希望在代码中执行的操作。您试图实现的目标一点也不清楚。您能否编辑您的问题以提供您试图用代码表示的结构的概述?谢谢您的建议。这对我来说很清楚。我想我要用肮脏的方式复制我的BaseActivity类,比如BaseFragmentActivity和BaseListActivity。
class Cat<A> extends A {
String eat(){ return "Cat is eating"; }
}
class Dog {
void eat(){ System.out.println("Dog is eating"); }
}