java索引器_索引器indexer

一、索引器的基本概述

索引器定义类似于属性,但其功能与属性并不相同,可以看成是属性的增强版,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。

1、索引器的定义

定义的一般形式:

[修饰符] 数据类型this[索引类型 index]

{

get{//获得属性的代码}

set{ //设置属性的代码}

}

修饰符包括public,protected,private,internal,new,virtual,sealed,override, abstract,extern.

this关键字用于定义索引器。this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,因此索引器不能具有用户定义的名称。

数据类型是表示将要存取的数组或集合元素的类型。

索引类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数,可以是字符串。

get访问器返回值。set访问器分配值。访问器的用途是指示索引器是可读写、只读还是只写的,如果是可读写的,访问器get或set均不能省略;如果只读的,省略set访问器;如果是只写的,省略get访问器。

value关键字用于定义由 set 索引器分配的值。

索引器可被重载。

索引器可以有多个形参,例如当访问二维数组时。

举例:相册索引

usingSystem;

namespace索引器

{

class Program

{

static void Main(string[] args)

{

//实例化相册

Ablum Myablum1 = new Ablum(2);

//实例化两张照片

Photo first = newPhoto("XiaoHong");

Photo second = newPhoto("XiaoMing");

//将两张照片赋给相册

Myablum1[0] = first;

Myablum1[1] = second;

//按序号查找

Photo testPhotos = Myablum1[0];

Console.WriteLine(testPhotos.Title);

//按标题查找

Photo testPhotos1 =Myablum1["XiaoMing"];

Console.WriteLine(testPhotos1.Title);

}

}

class Photo

{

private string PhotoTitle;

public Photo()

{

}

public Photo(string title)

{

PhotoTitle = title;

}

public string Title

{

get { return PhotoTitle; }

}

}

//相册类

class Ablum

{

//照片数组

private Photo[] photos;

//构造函数

public Ablum()

{

}

public Ablum(int Capacity)

{

photos = new Photo[Capacity];

}

//索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。

//如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。

//按序号索引

public Photo this[int index]

{

get {

if (index < 0 || index >=photos.Length)

{

Console.WriteLine("索引有问题");

return null;

}

return photos[index];

}

set {

if (index < 0 || index >=photos.Length)

{

Console.WriteLine("索引有问题");

return;

}

photos[index] = value;

}

}

//按标题索引

public Photo this[string title]

{

get {

foreach (Photo p in photos)

{

if (p.Title == title)

return p;

}

Console.WriteLine("找不到");

return null;

}

}

}

}

2、另外,在接口中也可以声明索引器,接口索引器与类索引器的区别有两个:一是接口索引器不使用修饰符;二是接口索引器只包含访问器get或set,没有实现语句。

例如:

publicinterface IAddress

{

stringthis[int index]{get;set;}

stringAddress{get;set;}

stringAnswer();

}

表示所声明的接口IAddress包含3个成员:一个索引器、一个属性和一个方法,其中,索引器是可读写的。

一般示例:

// Indexeron an interface:

publicinterface ISomeInterface

{

// Indexer declaration:

int this[int index]

{

get;

set;

}

}

//Implementing the interface.

classIndexerClass : ISomeInterface

{

private int[] arr = new int[100];

public int this[int index] // indexer declaration

{

get

{

// Check the index limits.

if (index < 0 || index >=100)

{

return 0;

}

else

{

return arr[index];

}

}

set

{

if (!(index < 0 || index >=100))

{

arr[index] = value;

}

}

}

}

classMainClass

{

static void Main()

{

IndexerClass test = new IndexerClass();

// Call the indexer to initialize theelements #2 and #5.

test[2] = 4;

test[5] = 32;

for (int i = 0; i <= 10; i++)

{

System.Console.WriteLine("Element #{0} = {1}", i, test[i]);

}

}

}

3、索引器和属性的区别

属性

索引器

允许调用方法,如同它们是公共数据成员。

允许调用对象上的方法,如同对象是一个数组。

可通过简单的名称进行访问。

可通过索引器进行访问。

可以为静态成员或实例成员。

必须为实例成员。

属性的 get访问器没有参数。

索引器的 get 访问器具有与索引器相同的形参表。

属性的 set 访问器包含隐式 value 参数。

除了 value 参数外,索引器的 set 访问器还具有与索引器相同的形参表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ,可以使用以下方式向索引库中添加Order对象的数据: 1. 首先,需要创建一个Order类,包括属性goodName、goodPrice、userId,以及对应的getter和setter方法。 2. 然后,使用Java API连接Elasticsearch,创建一个TransportClient对象,指定Elasticsearch服务的地址和端口号。 3. 接下来,使用IndexRequest对象来构建将要添加到索引库中的数据,设置索引名称为order_index,类型为order。 4. 使用XContentBuilder对象创建JSON格式的文档,将Order对象的属性值添加到文档中。 5. 使用IndexResponse对象来执行添加操作,然后通过TransportClient对象发送请求,将文档数据添加到索引库中。 代码示例: TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); IndexRequest indexRequest = new IndexRequest("order_index", "order"); XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject() .field("goodName", "商品1") .field("goodPrice", 50.0) .field("userId", "user1") .endObject(); indexRequest.source(builder); IndexResponse indexResponse = client.index(indexRequest).actionGet(); 注意:以上代码仅为示例,实际应用中需要根据具体需求进行修改和完善。 ### 回答2: 要使用Java Api向索引库order_index中添加Order对象的数据,需要先建立连接到Elasticsearch集群,并创建对应的索引和映射。然后使用Java Api将Order对象的数据添加到索引库中。 下面是示例代码,假设已经建立了与Elasticsearch集群的连接,使用的版本为Elasticsearch 7.x: ```java import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.common.xcontent.json.JsonXContent; import org.elasticsearch.common.xcontent.XContentBuilder; import java.io.IOException; public class OrderIndexer { private final RestHighLevelClient client; public OrderIndexer(RestHighLevelClient client) { this.client = client; } public void indexOrder(String goodName, double goodPrice, int userId) throws IOException { IndexRequest request = new IndexRequest("order_index"); request.id(String.valueOf(userId)); XContentBuilder builder = JsonXContent.contentBuilder() .startObject() .field("goodName", goodName) .field("goodPrice", goodPrice) .field("userId", userId) .endObject(); request.source(builder); IndexResponse response = client.index(request, RequestOptions.DEFAULT); System.out.println("Document created with id: " + response.getId()); } public static void main(String[] args) throws IOException { RestHighLevelClient client = // 创建与Elasticsearch集群的连接 OrderIndexer indexer = new OrderIndexer(client); // 添加订单数据 indexer.indexOrder("商品1", 9.99, 1); indexer.indexOrder("商品2", 19.99, 2); indexer.indexOrder("商品3", 29.99, 3); indexer.indexOrder("商品4", 39.99, 4); indexer.indexOrder("商品5", 49.99, 5); // 关闭连接 client.close(); } } ``` 以上代码创建了一个OrderIndexer类,包含了与Elasticsearch集群连接和添加订单数据到索引库的方法。在main方法中,示例了如何使用OrderIndexer类来添加5条订单数据。 注意,此示例使用了Elasticsearch 7.x版本的Java Api,具体使用的版本可能会有差异,请根据实际情况进行调整。 ### 回答3: 在Java中使用Elasticsearch的API向索引库(order_index)中添加Order对象的数据的步骤如下: 首先,我们需要创建一个Elasticsearch客户端连接,连接到所需的Elasticsearch集群。可以通过使用TransportClient类实现连接。 ```java // 创建连接设置 Settings settings = Settings.builder() .put("cluster.name", "your_cluster_name") .build(); // 创建TransportClient TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("your_host"), 9300)); ``` 其中,设置`your_cluster_name`为Elasticsearch集群的名称,`your_host`为Elasticsearch主机的IP地址。 接下来,我们可以创建一个索引,并向索引库中添加Order对象的数据。 ```java // 创建索引request IndexRequest indexRequest = new IndexRequest("order_index") .type("order_type") .id("1") .source(XContentFactory.jsonBuilder() .startObject() .field("goodName", "商品1") .field("goodPrice", 10.0) .field("userId", "用户1") .endObject()); // 添加数据 IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT); ``` 在上述代码中,我们创建了一个IndexRequest对象,并设置索引、类型、文档ID和数据。通过调用client的index方法将数据添加到索引中,并且返回一个IndexResponse对象。 可以按照上述步骤,依次创建多个IndexRequest对象,并使用client的index方法将多个数据添加到order_index索引中。 最后,记得在使用完Elasticsearch客户端后,关闭连接。 ```java // 关闭连接 client.close(); ``` 以上就是使用Java API向索引库order_index中添加Order对象数据的步骤。注意:本示例仅提供了添加单个Order对象的示例,如需添加多个对象,则需要重复创建并添加多个IndexRequest对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值