[英]Multiple constructors in a Java class
我對構造函數有些懷疑。
可以在三個不同的“狀態”中創建一個“ Foo”類,我們可以將它們稱為“ YOUNG”,“ ADULT”和“ OLD”。
我要強調的是,不能將它們視為不同的類,因為對象將演變,並且如果將其創建為“ YOUNG”,則將變為“ ADULT”,然后變為“ OLD”,依此類推。
我的問題是:如何定義一個或多個構造函數以使這三種類型多樣化?
我看到了一些可能性,但是沒有人是一種“優雅”的解決方案。
1)創建一個以int為輸入的構造函數
public Foo(int i)
{
switch (i)
{
case 0:
.
.
.
case 1:
.
.
.
case 2:
.
.
.
}
}
但我不喜歡它,因為不清楚是否有人看到此代碼。
2)創建一個空白的構造函數,然后創建三種不同的方法,例如
public Foo()
{
}
public void setYoungFoo()
{
.
.
.
}
public void setAdultFoo()
{
.
.
.
}
public void setOldFoo()
{
.
.
.
}
這可能是解決問題的明確方法,但我會在構造函數中解決此問題。
3)靜態變量在這種情況下有用嗎?
public static final String "YOUNG";
public static final String "ADULT";
public static final String "OLD";
public Foo(String field)
{
}
我不知道如何填充此構造函數,因為我從未使用過靜態最終變量(即使沒有在構造函數中使用,我也看到它們在某些Java類(如Calendar)中使用)。
您能否評論這三個選項以強調它們的缺點是什么,因為我非常確定它們不是一個好的解決方案。
使用方法1,但使用枚舉而不是int。 您甚至可以內聯該類中的枚舉,只需使其成為公共靜態即可。
class Foo {
public static enum fooState {
young, adult, old;
}
public Foo(fooState i) {
switch(i) {
case young: ... break;
case adult: ... break;
case old: ... break;
default: throw new InvalidStateException();
}
...
}
編輯 :您要求您對3個選項的意見,這是我的:
您實際上是否應該為Young,Adult和Old創建三個類,並且它們都可以實現一個公共接口或擴展一個抽象類以將它們聯系在一起?
在父抽象類中創建一個靜態工廠方法,該方法創建了所需子類的對象並將其返回? 你為什么不想上三堂課? 它們將從父類的引用類型中引用,因此它們將“看起來”像同一類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.