クラスがあります
class Account extends Stuff{
String name;
newObject(){
return new Account();
}
}
Stuff クラス内にメソッドがあります
//generates list of objects of the same type
//as given object and fills attribute
generateObjectsFromExisting(names)
{
List list = new List();
InstanceMirror instanceMirror = reflect(this);
Symbol formatSymbol = new Symbol("newObject");
for(var name in names){
//calles newObject function from this and returns a new object
var newInstanceObject = instanceMirror.invoke(formatSymbol, []);
Symbol symbol = new Symbol("name");
InstanceMirror field = newInstanceObject.setField(symbol,name);
list.add(newInstanceObject.reflectee)
}
return list;
}
だから書くとき
main(){
var account = new Account();
List accounts = new List();
accounts = account.generateObjectsFromExisting(['tim','tom']);
print(account.name) // returns null
print(accounts[0].name) // returns tim
print(accounts[1].name) // returns tom
}
この方法の問題点は
1 'generateObjectsFromExisting()' は、アカウントではなく、'アカウント' オブジェクトにあります
2 実装するすべてのクラスに「newObject」メソッドを手動で追加する必要があります。
私は「Account.generateObjectsFromExisting()」のような静的メソッドを好みますが、「this」にアクセスする方法 (静的では使用できないため) で、「this.new()」または「new Account()」と同等の何かを言うことができます;" 例: 「新しい this();」そのため、Stuff 内に「newObject」関数を 1 つしか持つことができないか、まったく必要ないかもしれません。
だから今私のコードはこのようになります
class Account extends Stuff{
String name;
}
もので
static generateObjectsFromExisting(names)
{
List list = new List();
for(var name in names){
var object = new this();
object.name = name;
list.add(object)
}
return list;
}
主に
main(){
// returns list of Accounts filled with names
accounts = Account.generateObjectsFromExisting(['tim','tom']);
print(accounts[0].name) // returns tim
print(accounts[1].name) // returns tom
}
クラスにアクセスして this.new(); のようなことをする方法を教えてください。または new this(); 明らかに、拡張された「スタッフ」ではなく、クラス「アカウント」にアクセスする必要があります
「this」アプローチが不可能な場合は、既存のオブジェクト内からクラスにアクセスする方法を教えてください。
お気に入り
generateObjectsFromExisting(names)
{
List list = new List();
var class = this.class;
var newObject = class.new():
...
}
または私の現在のアプローチが唯一の解決策です。..希望しない:)
ありがとうございました