在类中传递通用对象类型

时间:2014-02-04 13:48:11

标签: java generics abstract-class

我已经问了这个,这是一个搞砸的描述所以:

我有一个班级

private Class MyClass<T extends SomeClass> //where  SomeClass is an abstract class
{
    SomeClass T=new SomeClass(); //Something like that but which works
}

我想以某种方式实例化T或者使用转换来调用它的方法,因为SomeClass是抽象的而且上面是无效的

3 个答案:

答案 0 :(得分:0)

首先,正确的类定义是

public class MyClass<T extends SomeClass> { }

private class MyClass<T extends SomeClass> { } 

如果这个类是内部类。 T将被替换为某种类型。这意味着

SomeClass T =new SomeClass(); // this T is not the T from class definition

在上面的一行中,你试图创建一个抽象类的实例 - 这是不可能的!

创建扩展SomeClass的类并实现抽象方法(如果有的话)然后你可以创建一个实例SomeClass sc = new MyNewClassWhichExtendsSomeClass()

答案 1 :(得分:0)

java tutorials有一个非常好的解决方案

/**
 * Generic version of the Box class.
 * @param <T> the type of the value being boxed
 */
public class Box<T> {
    // T stands for "Type"
    private T t;

    public void set(T t) { this.t = t; }
    public T get() { return t; }
}

只需创建一个设置实例的方法

private class MyClass<T extends SomeClass> { 
     private T t;
     public void set(T t) { this.t = t; }
     //or
     public MyClass(T t){
         this.t = t;
     }
     public void seriousBusiness(){
         SomeClass someClass = (SomeClass) t;
         someClass.someClassMethod();
     }
} 

答案 2 :(得分:-1)

编辑错误答案,new T()不起作用。

如果要访问抽象类中的方法,它们必须是静态的,如:

public static int getNumber() {
    return 1;
}

然后您可以通过以下方式访问它:

SomeClass.getNumber();

请注意,SomeClass不是变量名,而是类的名称!