我是泛型新手,并且正在努力将其应用到我的情况:
我当前有几个 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/