私はいくつかのメンバーを持つJavaクラスを持っています。私はそれ用のカスタムキャストを書きたいです。私はそうすることが可能であるか不思議でしたか?
のは、次のようにクラスがあると仮定してみましょう:
class Person {
private int age;
private float weight;
// getters and setters and etc
}
私は希望int
のキャストがメンバー返すためにage
、オブジェクトの、とfloat
返すようにキャストをweight
オブジェクトのを。
例えば:
public class Main {
public static void main(String[] args) {
// create an object
Person P = new Person();
P.setAge(21);
P.setWeight(88.0);
// case 1: casting object to an existing data type
int personAge = (int) P; // would return the age
float personWeight = (float) P; // would return the weight
// case 2: casting an existing data type to an object
Person P2 = (Person) personAge; // this would create an instance of the object whose age is assigned and weight is not assigned
}
}
反対のことを行うことが可能である場合、私は思っていました。具体的には、鋳造int
にするPerson
のインスタンスを返すであろうPerson
、そのことをage
するために割り当てられ、同様にされますfloat
。
私はこの質問には答えを持っていない可能性が知っています。私は私の検索のいずれかの有用な結果を見つけることができませんでしたので、しかし、私はそれを依頼することを決めました。
PS私はのためにあることを理解しString
、toString
この方法は、ケース1の世話をするでしょう。
あなたは、キャスト演算子をオーバーロードすることはできません。Javaはそれをサポートし、おそらく決してしません。
所望のクラスのインスタンスに単一の値を変換するために、我々は、静的ファクトリメソッドを使用します。
public static Person fromAge(int age) {
return new Person(age);
}
彼らはしばしば、部分的に構築されたオブジェクトを返します。上記のスニペットでは、新たに構築された人しかいage
セット:他のフィールドは、デフォルト値を持つことになります。
逆を行うために、我々はゲッターを使用しています。
public int getAge() {
return age;
}
しかし、
toString
すでにそこにある、それは同様に他のデータ型を追加するために理にかなっています。
toInt
それは(のインスタンスとして私に適用されますとき意味をなさないPerson
クラス)。それは私が1つのint型の数で自分自身を表現することができないなど、私の身長、体重、私の、私の年齢、私は今日トイレに行ってきました回数、しない、どちらもすることができます可能性があり、クラスの大多数。
一方、toString
かなりよくこの仕事を行うことができます。私は(読み、あなたを与えることができます復帰を)私の趣味の要約、私の生体情報、でも私の絵を。それとも私はまだ十分オブジェクトを表すことになり、デフォルトの実装で、それを残すことができます。