将泛型类型参数类作为参数传递

时间:2015-12-09 03:26:42

标签: java generics reflection enums

假设我有一个方法

public class Activity_View extends AppCompatActivity {

Button backBtn; 
Button editBtn;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.activity_view);

    backBtn = (Button) findViewById(R.id.btnBack);
    editBtn = (Button) findViewById(R.id.btnEdit);
    ...

另一种方法,在另一个班级,

public <T extends Enum<T>> Enum<T> getEnumValue(String string, ??)

我将从方法2作为方法1的参数传递给我,以便我可以获得枚举值,即在我的幻想世界中我可以做到:

方法2:

public T method(String string)
  ...
  getEnumValue(string, ??)

方法1:

getEnumValue(string, T.class)

2 个答案:

答案 0 :(得分:1)

由于类型擦除,无法执行此操作。您必须传递显式Class<T>或足够的信息才能将其恢复(例如,您可以传递给String的{​​{1}}名称,或者Class.forName)。

答案 1 :(得分:-1)

EnumClass.getEnumConstants()

它位于java.lang.Class而不是java.lang.Enum。使用EnumClass.VALUE.cardinal()索引此数组。

如果您坚持呼叫String名称,则可以

EnumClass.getEnumConstants()[0].valueOf(stringValue)

这是为了在实例上调用静态方法,你可能会收到编译器警告,但它可以工作。