gpt4 book ai didi

Java抽象类获取扩展类的类型

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:00:53 26 4
gpt4 key购买 nike

我不知道怎么表达这个,所以我举个例子

class AbstractUser<A extends AbstractAccount<? extends AbstractType>> {
// I want a method that has access to Type
// And returns the specific Type that extends AbstractType
protected <T extends AbstractType> T doSomething(T type) {
// do stuff
// and return the type specific type T
}
}

class AbstractAccount<T extends AbstractType> {

}

class AbstractType {

}


class Type extends AbstractType {

}

class Account extends AbstractAccount<Type> {

}

class AccountAdmin extends AbstractAccount<Type> {

}

class User extends AbstractUser<Account> {

}

我想要的是在 User 类中我可以执行 getType() 并返回 AbstractAccount 的特定类型,在本例中为 Account

如何在不指定更多模板的情况下执行此操作?换句话说,我想要任何类型的 ? in ? extends AbstractType 就是在那个方法里

如果我这样做

final Account account = ...
final AccountAdmin admin = ...
final User user = ...
user.doSomething(account); // should work
user.doSomething(AccountAdmin); // should fail

最佳答案

你显然不能像这样在 AbstractUser 中创建方法:

public Class<A> getType() { return A.class; }

这是因为类型删除。运行时不知道 A 是什么。

因此,一种解决方法是将此方法抽象化:

public abstract Class<A> getType();

现在,您可以在子类中实现此方法:

class User extends AbstractUser<Account> {
public Class<Account> getType() { return Account.class; }
}

编辑:

现在我意识到您需要扩展 AbstractType 的类型,解决方法应该仍然有效。您只需要在 AbstractAccount 中创建另一个 getType 并让 Account 实现该方法。

关于Java抽象类获取扩展类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52772832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com