Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从类型参数扩展_Java_Android_Inheritance_Extends - Fatal编程技术网

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"); }
}