我已经问了这个,这是一个搞砸的描述所以:
我有一个班级
private Class MyClass<T extends SomeClass> //where SomeClass is an abstract class
{
SomeClass T=new SomeClass(); //Something like that but which works
}
我想以某种方式实例化T或者使用转换来调用它的方法,因为SomeClass是抽象的而且上面是无效的
答案 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不是变量名,而是类的名称!