Ես ունեմ դաս, որը տողեր է ստեղծում աղյուսակի դասավորության մեջ: Տողերի ստեղծումը կախված է տվյալներից և մետատվյալներից: Քանի որ մետատվյալները նույնն են յուրաքանչյուր տողի համար, օրինակ՝ ցույց տալ/թաքցնել տեսանելիության հատկությունները և այլն։ Ես ստեղծել եմ մետատվյալների հատկությունը որպես ստատիկ և սկզբնավորել մեկ անգամ՝ օգտագործելով initWidget
-ը RowWidget
-ից:
պարզապես օրինակ.
class RowWidget extends FlexTable{
public static void initWidget(Form form,
HashMap<Long, ContractorPermissionEnum> formModePermissionMap,
GridMode gridMode,
boolean isApplied,
boolean isChildExist,
boolean isChildAttachment)
{
// ...
}
}
Այնուհետև ես զանգահարեցի ստորև նշված կոնստրուկտորին յուրաքանչյուր ռեկորդային տվյալների համար:
public RowWidget(DataRawType dataRawType, Data data, Data parentData) {
// ...
}
Ինչպես կարծում էի, սա ճիշտ մոտեցում չէ։ քանի որ որպես օրինակ, երբ որևէ մեկը տեսնում է այս դասը, այնուհետև հասկանում է, որ այն կստեղծի մեկ տող: Ես չեմ ուզում սկզբում զանգահարել initWidget
: Ես ուզում եմ փոխանցել յուրաքանչյուր պահանջվող պարամետր կոնստրուկտորում միայն like
public RowWidget(DataRawType dataRawType,
Data data,
Data parentData,
Form form,
HashMap<Long, ContractorPermissionEnum> formModePermissionMap,
GridMode gridMode,
boolean isApplied,
boolean isChildExist,
boolean isChildAttachment) {
// ...
}
Բայց դրա շնորհիվ կոնստրուկտորը փաստարկներ չունի: և կարծում եմ, որ կոնստրուկտորում 5+ պարամետր ունենալը նույնպես վատ օրինակ է:
Ինչ-որ մեկը ինձ առաջարկում է.
- Ինչպե՞ս կառուցել դաս, որն ունի մեկ այլ օրինակում պահանջվող նույն հատկությունը:
Նշում. Ես գիտեմ, որ դա հնարավոր է միայն ստատիկ միջոցով, բայց չեմ ուզում օգտագործել ստատիկ:
- Ո՞րն է դասի կառուցման լավագույն միջոցը՝ ունենալով որոշ կանխադրված ամրագրման հատկություն բոլոր ատյանների համար:
Նշում. ես չեմ ցանկանում ստեղծել այլ դաս՝ դրան հասնելու համար: կամ ստացողի/սեթերի ցանկացած մեթոդ:
Նախապես շնորհակալություն.