Eva
Java粉絲募集中
  • 簡介
  • 我們的優勢
  • 最新消息
  • 下載與使用
  • 範例與說明
    • Eva Objects >
      • Bean類別定義
      • Entity型別定義
      • Struct型別定義
      • 建立Entity空白物件
      • 建立Entity修改物件
      • 建立Entity條件物件
      • 建立Struct值物件
    • Eva_ORM >
      • ORM程式主體
      • 使用條件物件執行操作
      • 執行更複雜條件的操作.
      • 分頁取回資料
      • 操作JDBC的參數
      • Array Property的操作
      • Collection Property的操作
      • 更複雜的Collection Property
      • 指定表格名稱
      • 新增資料庫Dialect
    • Eva_IOC >
      • IOC程式主體
      • AOP應用
    • Eva_Struct >
      • Struct範例
      • Bit Strcut範例
      • 指標範例
      • 於Eva_ORM中使用
    • Eva_Sort >
      • 依指定Properties排序
      • 部份排序
      • 優先排序部份
    • Eva_Cache >
      • hashing-based cache
      • 非hashing-based cache
  • API列表
  • 技術支援
    • 協助開發
  • 相關書籍

指標範例.

指標物件的操作將影響底層所使用到的儲存體,  若是多個指標同時指向一個儲存體, 則任一指標的操作都可能影響到所有指標的取值.

需注意的是, 就如同C語言中的指標使用一樣, 指標的指標不能將其資料傳送至其它執行環境.
package com.logntw.eva.ptr;

import junit.framework.Assert;

import org.junit.Test;

import com.logntw.eva.anno.struct.FieldSeq;
import com.logntw.eva.anno.struct.Struct;
import com.logntw.eva.struct.StructMapper;
import com.logntw.eva.struct.defo.DefoStructMappers;

public class PtrPtrTest
{
  @Struct
  public interface X
  {
    @FieldSeq(1)
    public int getA();
    public void setA(int a);
    
    @FieldSeq(2)
    public byte getB();
    public void setB(byte b);
  }
  
  @Test
  public void testIntPtr() throws Exception
  {        
    StructMapper<X> mapper = DefoStructMappers.getMapper(X.class);
    X x1 = mapper.createStruct();  
    X x2 = mapper.createStruct();
    x1.setA(1);
    x1.setB((byte)2);
    x2.setA(3);
    x2.setB((byte)4);
    
    PtrPtr<PtrPtr<StructPtr<X>>> ptr1 = new PtrPtr<PtrPtr<StructPtr<X>>>(new byte[8]);
    PtrPtr<StructPtr<X>> ptr2 = new PtrPtr<StructPtr<X>>(new byte[8]);
    
    StructPtr ptr3 = new StructPtr(X.class, new byte[10]);
    
    ptr3.assignThenNext(x1);
    ptr3.assignThenNext(x2);
    
    ptr1.assign(ptr2.assign(ptr3));
    
    PtrPtr<StructPtr<X>> ptr4 = ptr1.deref();
    StructPtr<X> ptr5 = ptr4.deref();
    
    X x3 = ptr5.lastThenDeref();
    X x4 = ptr5.lastThenDeref(); 
  
    Assert.assertEquals(x3.getB(), (byte)4);
    Assert.assertEquals(x3.getA(), 3);
    Assert.assertEquals(x4.getB(), (byte)2);
    Assert.assertEquals(x4.getA(), 1);
  }
}
Powered by Create your own unique website with customizable templates.