Есть ли какая-то похожая функция в Java как «атрибуты» в Delphi? - PullRequest
1 голос
/ 06 октября 2011

Есть ли в Delphi какая-то функция, похожая на атрибуты, в Delphi?

Пример объяснения атрибутов в Delphi: http://www.malcolmgroves.com/blog/?p=476

Att.

Ответы [ 2 ]

3 голосов
/ 06 октября 2011

Из этой статьи вы ищете Java-аннотации .Они позволяют вам делать такие вещи, как:

@SomeInfo(author = "Bob", year = 1993)
class Foo {
    @SomeInfo(author = "me", somethingElse = "abcdefg")
    private int x = 5;

    @SomeInfo(author = "Fred", column = "order")
    public int getX() {
        return x;
    }
}

, где @SomeInfo - аннотация.Их можно применять к классам, полям и методам, и они несут метаданные о том, что они аннотируют, которые могут быть прочитаны во время выполнения, если они имеют соответствующее сохранение.Например:

@Retention(RetentionPolicy.RUNTIME)
@interface SomeInfo {
    String author();
    int year() default -1;
    String column() default "";
    String somethingElse() default "";
}

class Main {
    public static void main(String[] args) throws Exception {
        List<AnnotatedElement> annotatedElements =
            new ArrayList<AnnotatedElement>();
        annotatedElements.add(Foo.class);
        annotatedElements.add(Foo.class.getDeclaredField("x"));
        annotatedElements.add(Foo.class.getDeclaredMethod("getX"));
        for (AnnotatedElement annotatedElement : annotatedElements) {
            System.out.println("Author of {" + annotatedElement + "} = " +
                annotatedElement.getAnnotation(SomeInfo.class).author());
        }
    }
}
0 голосов
/ 06 октября 2011

Похоже, что атрибуты - это способ хранить разные переменные вместе.

Это то, что ООП (очень) обычно (как и JAVA) создает классы, которые представляют сущности. Эти сущности в основном состоят из разных переменных (или атрибутов)

Этот пример по вашей ссылке и сравнение с JAVA прояснит это:

MyAttribute = class(TCustomAttribute)
private
 FName: string;
 FAge: Integer;
public
 constructor Create(const Name : string; Age : Integer);
 property Name : string read FName write FName;
 property Age : Integer read FAge write FAge;
end;

Это как маленький класс в JAVA:

public class Customer()
{
  String Fname;
  int FAge;

  public Customer()
  {
   /*constructor code*/
  }
}

и создание класса из вашего примера:

  TMyClass = class
 public
  [MyAttribute('Malcolm', 39)]

Это как создание нового объекта персонажа:

Customer[] cust1= new Customer['Malcolm', 39]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...