相关疑难解决方法(0)

在运行时获取泛型类

我怎样才能做到这一点?

public class GenericClass<T>
{
    public Type getMyType()
    {
        //How do I return the type of T?
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试的所有东西总是返回类型Object而不是使用的特定类型.

java generics reflection

474
推荐指数
16
解决办法
53万
查看次数

获取java.util.List的泛型类型

我有;

List<String> stringList = new ArrayList<String>();
List<Integer> integerList = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)

是否有(简单)方法来检索列表的泛型类型?

java generics

246
推荐指数
8
解决办法
27万
查看次数

Java泛型类型擦除:何时以及发生了什么?

在Oracle的网站上读到了Java的类型擦除.

什么时候发生类型擦除?在编译时还是运行时?当班级加载?当类被实例化时?

很多站点(包括上面提到的官方教程)都说在编译时会发生类型擦除.如果在编译时完全删除了类型信息,那么当调用使用泛型的方法而没有类型信息或错误的类型信息时,JDK如何检查类型兼容性?

考虑以下示例:Say class A有一个方法,empty(Box<? extends Number> b).我们编译A.java并获取类文件A.class.

public class A {
    public static void empty(Box<? extends Number> b) {}
}
Run Code Online (Sandbox Code Playgroud)
public class Box<T> {}
Run Code Online (Sandbox Code Playgroud)

现在我们创建另一个类B,该类empty使用非参数化参数(原始类型)调用该方法:empty(new Box()).如果我们编译B.javaA.class在类路径中,javac的是足够聪明,引发警告.所以A.class 一些类型信息存储在其中.

public class B {
    public static void invoke() {
        // java: unchecked method invocation:
        //  method empty in class A is applied to given types
        //  required: Box<? extends java.lang.Number>
        //  found: …
Run Code Online (Sandbox Code Playgroud)

java generics type-erasure

233
推荐指数
6
解决办法
8万
查看次数

在Java中实例化泛型类

我知道Java的泛型有点不如.Net.

我有一个泛型类Foo<T>的,我真的需要一个实例TFoo使用参数的构造函数.如何解决Java的局限?

java generics

148
推荐指数
3
解决办法
17万
查看次数

Java泛型 - 获取类?

我有一个列表,编程如下:public class MyList<T>.有没有办法使用T变量来获取类的名称(所以我可以从内部MyList知道T是字符串,套接字等)?

编辑:没关系,在这里找到答案.

java generics

77
推荐指数
3
解决办法
13万
查看次数

Java泛型,获取泛型参数的Class <T>

我有一个抽象类:

public abstract class RootProcessor<T> {
    Class<T> clazz;
}
Run Code Online (Sandbox Code Playgroud)

我需要填写ClassT clazz;孩子RootProcessor- 每个孩子都有自己的孩子T

我发现只有一个解决方案,但它需要编译器参数 -Xlint:unchecked

public RootProcessor(){
    this.clazz = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
Run Code Online (Sandbox Code Playgroud)

这是最好的解决方案吗?没有我们可以这样做-Xlint:unchecked吗?

java generics

40
推荐指数
1
解决办法
9万
查看次数

嵌套泛型继承

我有以下课程:

class Field<T> {

  private final Class<T> type;

  public Field(Class<T> type) {
    this.type = type;
  }
}

class Pick<V> {
  private final V value;
  private final Class<V> type;

  public Pick(V value, Class<V> type) {
    this.value = value;
    this.type = type;
  }
}
Run Code Online (Sandbox Code Playgroud)

和问题所涉及的类:

class PickField<T> extends Field<Pick<T>> {

  public PickField(Class<Pick<T>> type) {
    super(type);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在这似乎被编译器接受了.不幸的是,我不知道/理解如何创建一个新的实例PickField,例如 String选择.

这当然 - 不起作用:
new PickField<String>(Pick.class)

这是不允许的(我想我理解为什么):
new PickField<String>(Pick<String>.class)

那怎么办呢?或者整个方法是否以某种方式" "?

java generics inheritance

18
推荐指数
2
解决办法
1103
查看次数

从泛型类型T获取"类"对象

我想创建返回XML文档的Object表示的泛型函数(使用JAXB).我需要将"class"对象传递给JAXBContext构造函数,但是如何从T中获取它?

public <T> readXmlToObject(String xmlFileName, T  jaxbClass) {
   JAXBContext context = JAXBContext.newInstance(T.class); // T.class - here error, how to get it?
   .......
}
Run Code Online (Sandbox Code Playgroud)

java generics

12
推荐指数
2
解决办法
1万
查看次数

在抽象超类上获取泛型类型参数的实际类型

我有一个类:

public abstract class BaseDao<T extends PersistentObject> {

  protected Class<T> getClazz() {
     return T.class;
  }

  // ...

}
Run Code Online (Sandbox Code Playgroud)

但是编译器说T.class;:Illegal class literal for the type parameter T.

我怎样才能上课T

java generics dao jpa

12
推荐指数
4
解决办法
1万
查看次数

Java泛型方法类型转换

为什么会这样?代码中的一行运行良好,而另一条相似的代码则没有.自动类型转换是否仅在某些条件下发生?我试图将gt.echoV()分配给一个对象,它运行良好; 但是当我将它分配给一个String时,同样的错误将再次出现.

public class GeneMethodTest {

    public static void main(String... args) {
        GeneMethodTest gt = new GeneMethodTest();
        gt.<String>echoV(); //this line works well
        gt.<String>echoV().getClass();//this line leads to a type cast exception                                                          
    }

    public <T> T echoV() {
        T t=(T)(new Object());                                                                    
        return t;
    }
}
Run Code Online (Sandbox Code Playgroud)

java generics

6
推荐指数
1
解决办法
6770
查看次数

标签 统计

generics ×10

java ×10

dao ×1

inheritance ×1

jpa ×1

reflection ×1

type-erasure ×1