小编Dan*_*ves的帖子

Delphi - 提取setter方法的属性名称

在以下类型中:

MyClass = class(TInterfacedPersistent)
private
  FMyProperty: Integer;      
published
  procedure setMyProperty(Value: Integer); virtual;
  property MyProperty: Integer read FMyProperty write setMyProperty;
Run Code Online (Sandbox Code Playgroud)

我想通过RTTI知道"MyProperty"属性的setter方法的名称.我尝试过以下方法:

    procedure ShowSetterMethodsNames(pMyObject: TObject);
    var
      vPropList: TPropList;      
      vCount, I: Integer;
    begin
      vCount:= GetPropList(pMyObject.ClassInfo, tkProperties, @vPropList);

      for I:= 0 to vCount -1 do
      begin
          if Assigned(vPropList[I]^.SetProc) then
            ShowMessage(pMyObject.ClassType.MethodName(vPropList[I]^.SetProc));
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

虽然指针不是nil,但我所有的都是空消息.有人给我一些小费吗?

PS:我正在使用Delphi XE4,我知道我应该使用扩展RTTI而不是经典,但无论如何,我不能在两个功能中做我想要的...所以,任何帮助将不胜感激.谢谢你的回复.


最终版,问题解决了:

这是代码工作,基于(我的朋友和...的帮助)RTTI单元(TRTTIInstanceProperty类的DoSetValue方法):

procedure ShowVirtualSettersNames(pObject: Pointer);
var
  vSetter, vPointer: Pointer;
  vPropList: TArray<TRttiProperty>;
  vProp: TRttiProperty;
begin
  vPropList:= RTTIUtils.ExtractProperties(TObject(pObject).ClassType); // Helper to get properties from a type, based in extended RTTI

  for …
Run Code Online (Sandbox Code Playgroud)

delphi reflection rtti delphi-xe4

8
推荐指数
1
解决办法
2886
查看次数

QueryDSL JPA-与group by无关的自加入

有什么办法可以用 QueryDSL 获取这个查询吗?

select
  person.name,
  count(neighbors.*)
from person as neighbors
where person.address = neighbor.address
group by person.name
Run Code Online (Sandbox Code Playgroud)

其中address不是 FK。

java jpa jpql querydsl

5
推荐指数
1
解决办法
5048
查看次数

标签 统计

delphi ×1

delphi-xe4 ×1

java ×1

jpa ×1

jpql ×1

querydsl ×1

reflection ×1

rtti ×1