java - 从泛型类中访问类型 T 的静态方法

标签 java generics static-methods

我是泛型新手,并且正在努力将其应用到我的情况:

我当前有几个 SyncData 类,一个对应于我希望同步的每种对象类型。我正在考虑将其更改为单个通用类 SyncData。在此类中,代码的某些部分将使用 T 类型的对象,但我还想引用 T 类型的静态方法。这将使我能够指定要调用的通知操作(特定于数据类型)同步完成后。

我陷入了一个循环:要访问方法,我需要在通用 T 扩展接口(interface)中定义一个所有类型都将实现的接口(interface),然后我可以在我的 T 类中引用类型 T 的相关方法。通用 SyncData 类。但是,我无法在接口(interface)中指定静态方法,并且因为我不能在接口(interface)中指定静态方法,所以我无法在通用 SyncData 类中访问它。

我看过各种教程、问题等,也许我错过了显而易见的东西,但我看不到前进的方向 - 所有出现的内容都涉及泛型和静态网络的不同问题。任何建议将不胜感激。

编辑:

根据要求添加了一些示例代码来说明我尝试做的事情(我实际上希望在代码中的其他各个点使用静态方法,但这说明了这一点)。

是否可以从 SyncAction 类中访问类 T 的静态方法(无需使 T 扩展 DataType1,此时使用泛型就没有意义,因为 T 不能是 DataType2)?

public interface Syncable {
    //following needed or I can't access onSyncComplete in SyncAction
    public void onSyncComplete();
}

public class DataType1 implements Syncable {
    //constructor etc removed as irrelevant to question

    //Eclipse warns 'this static method cannot hide instance method from Syncable' 
    public static void onSyncComplete(){
        //do stiff here
    }
}

public class SyncAction<T extends Syncable>{
    //do all the syncing etc using multiple DataType1 objects

    T.onSyncComplete();
}

最佳答案

即使 onSyncComplete() 方法可以是静态的,您也必须将它们设置为实例(即非静态)方法才能正常工作。

原因是静态方法(和字段)不是“继承的”。

如果您确实想要一个静态方法,您可以让您的 onSyncComplete() 实例方法在其实现中调用另一个(可能是私有(private)的)静态方法。

关于java - 从泛型类中访问类型 T 的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716272/

相关文章:

java - 查找从给定客户端 IP 创建的 Activity session 数

java - 如何在java中使用用户输入的每个所需帐户以及转账金额将资金从一个帐户转移到另一个帐户

c# - 获取泛型对象参数的实际类型

java - 具有不同签名java的实现

java - 通过对象实例访问静态方法

java - 用 Java 构建 GPS 跟踪应用程序

java - org.apache.jasper.JasperException : Unable to initialize TldLocationsCache: java. util.zip.ZipException:无效的条目 CRC

Java 泛型问题 - Class<T> 与 T?

java - PowerMockito 模拟单个静态方法并在另一个静态方法中返回对象

c++ - 静态成员初始化期间访问私有(private)静态函数