### Question:
FunctionType implements Type { @Override public String getDisplayName() { ImmutableList<String> names = getTypeParameters().stream() .map(Type::getDisplayName) .collect(toImmutableList()); return "function(" + Joiner.on(",").join(names) + ")"; } FunctionType(List<Type> argumentTypes, Type returnType); Type getReturnType(); List<Type> getArgumentTypes(); @Override List<Type> getTypeParameters(); @Override final TypeSignature getTypeSignature(); @Override String getDisplayName(); @Override final Class<?> getJavaType(); @Override boolean isComparable(); @Override boolean isOrderable(); @Override boolean getBoolean(Block block, int position); @Override void writeBoolean(BlockBuilder blockBuilder, boolean value); @Override long getLong(Block block, int position); @Override void writeLong(BlockBuilder blockBuilder, long value); @Override double getDouble(Block block, int position); @Override void writeDouble(BlockBuilder blockBuilder, double value); @Override Slice getSlice(Block block, int position); @Override void writeSlice(BlockBuilder blockBuilder, Slice value); @Override void writeSlice(BlockBuilder blockBuilder, Slice value, int offset, int length); @Override Object getObject(Block block, int position); @Override void writeObject(BlockBuilder blockBuilder, Object value); @Override Object getObjectValue(ConnectorSession session, Block block, int position); @Override void appendTo(Block block, int position, BlockBuilder blockBuilder); @Override BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytesPerEntry); @Override BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries); static final String NAME; }### Answer:
@Test public void testDisplayName() { Type function = new FunctionType( ImmutableList.of(RowType.from(ImmutableList.of(field("field", DOUBLE)))), BIGINT); assertEquals(function.getDisplayName(), "function(row(field double),bigint)"); }