solidity">// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;contract StructDemo {struct Student {uint256 id;string name;}// 初始化一个结构体Student public student;function initStudent5(Student memory _stu) public {student = _stu;}
}
< dependency> < groupId> org.web3 j</ groupId> < artifactId> core</ artifactId> < version> 4.12.0</ version>
</ dependency>
java">package com. kevin ; import org. junit. Before ;
import org. junit. Test ;
import org. web3 j. abi. FunctionEncoder ;
import org. web3 j. abi. FunctionReturnDecoder ;
import org. web3 j. abi. TypeReference ;
import org. web3 j. abi. datatypes. Function ;
import org. web3 j. abi. datatypes. Type ;
import org. web3 j. abi. datatypes. Utf8String ;
import org. web3 j. abi. datatypes. generated. Uint256 ;
import org. web3 j. protocol. Web3j ;
import org. web3 j. protocol. core. DefaultBlockParameterName ;
import org. web3 j. protocol. core. methods. request. Transaction ;
import org. web3 j. protocol. core. methods. response. EthCall ;
import org. web3 j. protocol. http. HttpService ; import java . io. IOException ;
import java . math. BigInteger ;
import java . util. ArrayList ;
import java . util. Collections ;
import java . util. List ;
import java . util. concurrent. CompletableFuture ;
import java . util. concurrent. ExecutionException ; public class StructDemoTest2 { private Web3j web3 jClint; private Long chainId = 5777L ; @Before public void init ( ) { web3 jClint = Web3j . build ( new HttpService ( "http://127.0.0.1:8545" , true ) ) ; } @Test public void getStudent ( ) throws IOException , ExecutionException , InterruptedException { List < TypeReference < ? > > outputParameters = new ArrayList < > ( ) ; outputParameters. add ( new TypeReference < Uint256 > ( ) { } ) ; outputParameters. add ( new TypeReference < Utf8String > ( ) { } ) ; Function newStu = new Function ( "student" , Collections . emptyList ( ) , outputParameters) ; String encode = FunctionEncoder . encode ( newStu) ; String from = "0x148F0cF0d183027D3f35dF8553012bD980F99ae5" ; String contractAddress = "0x57BF94B4Cca86d6e83347F520Ba2cDfC4FA318F9" ; Transaction ethCallTransaction = Transaction . createEthCallTransaction ( from, contractAddress, encode) ; CompletableFuture < EthCall > ethCallCompletableFuture = web3 jClint. ethCall ( ethCallTransaction, DefaultBlockParameterName . LATEST) . sendAsync ( ) ; EthCall ethCall = ethCallCompletableFuture. get ( ) ; String input = ethCall. getValue ( ) ; System . out. println ( input) ; List < Type > decode = FunctionReturnDecoder . decode ( ethCall. getValue ( ) , newStu. getOutputParameters ( ) ) ; Student stu = new Student ( ( ( BigInteger ) decode. get ( 0 ) . getValue ( ) ) . longValue ( ) , ( String ) decode. get ( 1 ) . getValue ( ) ) ; System . out. println ( "stu-->" + stu) ; } }