Win*_*Man 11 java generics interface
我从Java 1.4(以前的公司)过渡到Java 1.6(新公司).我观察到,在1.4的情况下,大多数专有框架是使用接口和模板模式定义的,而1.6中大多数框架是围绕泛型定义的.
虽然我仍在努力控制Generics,但我的问题是 - 这是一种正确的设计方法吗?接口使您的设计更加灵活/分离.而泛型,实现类型安全并强制您传递特定类型的类.没有真正帮助解耦您的代码.它是否正确?
一个例子 -
public MyWizard extends SignupWizard<SignupSection, SignupObject, SignupListener, SignupView>{
}
Run Code Online (Sandbox Code Playgroud)
相反,如果它是设计将更灵活..
public interface Wizardable{
public SignableSection getSection();
public SignableObject getSignableObject();
...
}
public MyWizard implements Wizardable{
....
}
Run Code Online (Sandbox Code Playgroud)
我不会说泛型和接口是什么,每个都有不同的需求和用途。以原始帖子中提到的方式使用通用参数有多种用途。它允许开发人员定义构成该类的字段对象类型的基类。使用此功能,开发人员可以接受类对象作为参数,他们可以使用反射来创建实际对象并设置字段,或者只接受要设置的整个对象。与需要类对象而不是执行类对象有关的问题new T()被称为类型擦除。
使用泛型的另一个好处是,当使用超类的字段或方法时,您不需要一直进行类型转换-您可以自己知道它们的类型,但是Java不会在任何地方存储该类型信息。另一个好处是,您的所有getter / setter方法都可以使用通用参数,并根据您在上述对象中设置了专用字段这一事实,将更明智的方法暴露给其他对象。
使用接口执行与泛型相同的操作的问题在于,在返回它们之前(或检查传入的类型,然后将字段设置为对象),需要其他方法来访问专用类型并将其强制转换。这使设计变得更加复杂,并且根本没有帮助去耦。
正如我在评论中提到的那样,任何子类都将设置这些类型参数,而不会向用户公开任何内容。因此,您可以拥有类似的东西,class MegaSignupWizard extends SignupWizard<MegaSignupSection, MegaSignupObject, MegaSignupListener, MegaSignupView>并且MegaSignupWizard无需进行任何强制转换即可访问类中的专用方法,从而使一切仍然完全有效。现在很酷:)