【问题标题】:Java. Howto change methods signature爪哇。如何更改方法签名
【发布时间】:2011-12-02 14:26:50
【问题描述】:

是否可以根据参数更改 Java 中的方法签名?

示例:

给定一个类,带有一个泛型参数MyItem<T>。 假设这个类有一个方法,它返回T 给定第二个类 'myReturner()',其中包含方法 myreturn(MyItem<T>)

问题:

我可以让myreturn(MyItem<T>) 返回一个 T 对象,这取决于 MyItem 的泛型参数吗?

我想这是不可能的,因为签名是在 Java 的编译时设置的,而 T 在编译时是未知的。 如果是这样,模拟方法的最佳方法是什么,该方法将根据参数返回不同的对象? 为每个参数类型编写自己的方法是唯一的方法吗?

【问题讨论】:

  • 为什么会这样:编译 Java 时只需将 Object myreturn(MyItem) 作为方法输出,删除任何通用信息。这个方法显然可以接受任何对象。
  • 据我猜测 Viruzzo 的链接应该在这个链接的某个地方:docs.oracle.com/javase/tutorial/java/generics/methods.html

标签: java generics methods signature


【解决方案1】:

这样的?

private <T> T getService(Class<T> type) {
    T service = ServiceTracker.retrieveService(type);
    return service;
}

【讨论】:

    【解决方案2】:

    你的意思是这样的:

    <T> T myMethod(MyItem<T> item) 
    

    ?

    【讨论】:

      【解决方案3】:

      你可以,如果你也让整个类对同一个类型 T 通用,比如:

      import java.util.ArrayList;
      
      public class MyReturn<T> {
      
          public T myReturn(ArrayList<T> list){
              return null; //Your code here
          }
      }
      

      【讨论】:

        【解决方案4】:

        通用返回类型是完全可能的。例如在这里:How do I make the method return type generic? 或在这里:Java Generics: Generic type defined as return type only

        【讨论】:

          【解决方案5】:

          我想你想要这样的东西:

          public static void main(String[] args) {
              String bla = myMethod(new MyItem<String>());
          }
          
          public static <T> T myMethod(MyItem<T> item) {
              return null;
          }
          
          public class MyItem<T> {
              //just a dummy
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-02-05
            • 2011-05-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-17
            • 1970-01-01
            相关资源
            最近更新 更多