1) У меня есть класс с именем Utilites
, который выполняет некоторые строковые проверки, чтобы убедиться, что «ID» соответствует стандарту.Передача getClass() в качестве параметра для другого класса
2) Я хотел передать детали вызывающего класса классу Utilities
, чтобы решить, является ли «ID» правильным для этого типа (между Members
и Holding
).
3) PremiumMember
представляет собой расширенный класс Member
и передает все параметры Member
4) На данный момент, создавая новый PremiumMember
имеет класс java.lang.Class
вместо ожидаемого library.Member
класс, содержащий Основной способ, чтобы проверить код
package library;
import lib.Utilities;
public class LibraryManagementSystem
{
static Member[] members = new Member[15];
public static void main(String[] args)
{
members[0] = new PremiumMember("p000001", "Mr Bill Wrong"); // Prints **Java.lang.Class**
System.out.println(members[0].getClass()); // Prints **library.Member**
}
класс, содержащий конструктор
import lib.Utilities;
public abstract class Member {
public Member(String memberID, String fullName) // Constructor for each member
{
memberNumber = Utilities.validateId(memberID, this.getClass()); // Makes sure that the ID conforms to all requirements
this.fullName = fullName;
}
утилит, класс, который проверяет действительность идентификационного номера
import library.Holding;
import library.Member;
public class Utilities {
public static String validateId(String checkId, Type classType)
{
if (classType.getClass().getGenericSuperclass() == Holding.class)
{
// Deal with code one way
return "Is of Holding Class"
}
else if (classType.getClass().getGenericSuperclass() == Member.class)
{
// Deal with code another way
return "Is of Member Class"
}
else
{
System.out.println(classType.getClass() + " Not of Member/Holding class");
return "INVALID";
}
Я не понимаю, почему инстанцировании и якобы собирается, хотя пользовательский конструктор возвращает Java.lang.Class
класс?
Спасибо!
Не могли бы вы объяснить часть 'Вы вызываете getClass() на java.lang.reflect.Type' – Abhishek
@Abhishek: Посмотрите на код в' validateId' - тип параметра 'classType' -' Type', а тело метода использует 'classType.getClass()' ... –
Это был ясный и сжатый ответ, спасибо. Я изменил параметр, посланный в 'Utilities.ValidateId', на' this.getClass() ', и я изменил параметр, принятый в класс > classType'. 'Sysout' в методе' ValidateId' успешно показывает 'library.Member'! – Ari