Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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_Generics - Fatal编程技术网

Java泛型到变量

Java泛型到变量,java,generics,Java,Generics,java泛型如何分配变量并传递它?我不想这样做: 为了实现您的期望,您需要一个接口,并且类应该实现它 interface JavaGeneric { public String getDetails(); } 现在,在类中实现它 class Foo implements JavaGeneric { public String getDetails() { return "Foo"; } } 以及 现在,在if-else中创建实例,并在

java泛型如何分配变量并传递它?我不想这样做:


为了实现您的期望,您需要一个接口,并且类应该实现它

interface JavaGeneric
{
   public String getDetails();
}
现在,在类中实现它

class Foo implements JavaGeneric
{
     public String getDetails()
     {
           return "Foo";
     }
}
以及

现在,在if-else中创建实例,并在最后调用getDetails方法

==更新==

我不太清楚,你到底想达到什么目的。但是,假设您需要泛化getDetails方法的返回类型

然后在实施

class Foo<T> implements JavaGeneric<T>
{
     public T getDetails()
     {
          // your code
     }
}
就打电话

myClass.getDetails()
由于类型擦除,两种类型之间没有区别

myClass.<T>getDetails()


似乎您将getDetails声明为泛型只是因为您希望在方法体中使用类型变量T。类型变量T不是方法签名或返回类型的一部分


这通常是不需要的。根据您的方法实际执行的操作,也许您可以从方法声明中删除,并将T替换为?消息正文中的所有位置。

如果要将类型从变量传递到方法,请使用类参数:

public class MyClass {
   void getDetails(Class<?> cls) {
      //...
   }
}
那么您只需要一个Class类型的对象:


泛型只在编译时存在,因此不可能从运行时变量传递泛型类型参数。目前还不清楚您在getDetails中实际使用该类型做了什么,但是如果您无法使它与类对象一起工作,则需要坚持使用第一个示例中的代码,并为每个显式类型分别调用一个方法。

您可以使用一个由Foo和Bar实现的接口。希望这能作为提示!怎样我试着用同样的条件进行搜索,但找不到任何解决方案。顺便说一下,java中的泛型实际上被称为参数化类型,如果您需要执行foo.someMethod;很可能你误用了泛型。通常情况下,您应该能够依赖类型推断。@Michael,我将其用作myClass.someMethod,我将其传递给我的改型API调用以区分泛型响应字段。似乎我误导了我问题的详细信息,让我再更新一次请查看我的更新代码,似乎我误导了所有人,抱歉。@tenponce void getDetails是什么意思?它是MyClass中的一个方法,这就是我正在调用的,我正在传递给它。这正是我的代码中的内容。@tenponce我不知道你到底在问什么,但据我所知,我更新了我的代码。让我知道请看我的更新代码,似乎我误导了所有人,对不起。我正在通过改装的API调用传递T来区分要在通用响应上使用的对象
JavaGeneric jg;
if (someCondition) {
   jg = new Foo();
} else if (someCondition) {
   jg = new Bar();
}

jg.getDetails ();
interface JavaGeneric<T>
{
   public T getDetails();
}
class Foo<T> implements JavaGeneric<T>
{
     public T getDetails()
     {
          // your code
     }
}
interface JavaGeneric {
public String getDetails(); //also you can have default methods implementation here.
}

class Foo implements JavaGeneric {
 public String getDetails(){
   return "Foo Details";
 }
}


class Bar implements JavaGeneric {
 public String getDetails(){
   return "Bar Details";
 }
}


// Somewhere in code

JavaGeneric jg;
if (someCondition) { //lets say this is false
   jg = Foo;
} else if (someCondition) { // lets say this is true
   jg = Bar;
}

jg.getDetails(); //we will get "Bar Details"
myClass.getDetails()
myClass.<T>getDetails()
myClass.<R>getDetails()
public class MyClass {
   void getDetails(Class<?> cls) {
      //...
   }
}
MyClass myClass = new MyClass();
Class<?> jg;
if (someCondition) {
   jg = Foo.class;
} else if (someCondition) {
   jg = Bar.class;
}

myClass.getDetails(jg);