2012-05-22 2 views
2

Я нахожу код, как показано ниже, и мне нужно получить значение дочернего класса из статического метода родительского класса.Как получить значение свойства внутри унаследованного метода в универсальном классе?

Может кто-нибудь помочь мне решить эту проблему? Заранее спасибо.

public abstract class DataObject<T>{ 
    public static int GetAllTotal(){ 
     // How can I obtain a T propery called "code" = "001". 
     int cont = SQL.getTotalFromQuery(
          "SELECT * from tblProducts where code = '001'" 
     ); 
     return ffff 
    } 

    ... 
} 

public class Product extends DataObject<Product>{ 
    private String code = "001"; 
    public Product(){ 
    } 
} 

... 

Product.GetAllTotal(); 
+0

метод Это, вероятно, не должно быть статическим, так как это не будет работать очень хорошо с наследованием , –

+1

BTW, имена методов Java не должны быть капитализированы. – Robin

ответ

1

вам нужно использовать следующее:

super.GetAllTotal(); 

В детстве (производный) класса.

Где super является ссылкой родительского элемента производного класса в java.

+0

Есть ли способ сделать это без создания метода в дочернем классе? – user1410626

+0

Да, вы можете вызвать из конструктора дочернего класса и назначить его в поле класса, чтобы использовать его позже. – GingerHead

+0

Есть ли способ получить экземпляр T внутри метода GetAllTotal? Может быть, отражение? – user1410626

0

используйте ключевое слово super для доступа к ссылке родительского класса. В вашем случае,

super.GetAllTotal(); 
1

Прежде всего, вам нужен объект класса, чтобы иметь возможность доступа к элементам динамически из статического метода.

Тогда вы могли бы определить публичную функцию getCode() в родительском элементе, которую вы переопределите в дочернем классе, который возвращает значение переменной-члена code.

+0

Что относительно отражения в методе GetAllTotal? Могу ли я узнать, что Product.GetAllTotal() поступает из класса Product? Если возможно, могу ли я создать экземпляр продукта? – user1410626

+0

@ user1410626 - Возможно, но он медленный, уродливый и подверженный ошибкам. И вы должны ограничить видимость 'GetAllTotal()' '' protected ', если сможете. Что касается создания экземпляра самостоятельно, вы можете не получить требуемое значение кода. Как насчет перехода с предложением в мой ответ и добавления параметра 'DataObject' в' GetAllTotal() '? Вам придется иметь дело с предупреждениями о непроверенных вызовах, но это звучит как меньшее зло – Attila

+0

@ user1410626 - также, должен 'GetAllTotal()' быть статическим? – Attila

0

косяк мы делаем метод GetAllTotal параметрироваться принять аргумент, или их некоторое ограничение в изменении определения

GetAllTotal(String code) 
Смежные вопросы