Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3313338
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 17, 20262026-05-17T22:06:13+00:00 2026-05-17T22:06:13+00:00

I want to use protobuff in a Java application to facilitate serialization and I

  • 0

I want to use protobuff in a Java application to facilitate serialization and I have a question about this quote from the Google web site

Protocol Buffers and O-O Design
Protocol buffer classes are basically
dumb data holders (like structs in
C++); they don’t make good first class
citizens in an object model. If you
want to add richer behaviour to a
generated class, the best way to do
this is to wrap the generated protocol
buffer class in an
application-specific class. Wrapping
protocol buffers is also a good idea
if you don’t have control over the
design of the .proto file (if, say,
you’re reusing one from another
project). In that case, you can use
the wrapper class to craft an
interface better suited to the unique
environment of your application:
hiding some data and methods, exposing
convenience functions, etc. You should
never add behaviour to the generated
classes by inheriting from them. This
will break internal mechanisms and is
not good object-oriented practice
anyway.

from: http://code.google.com/apis/protocolbuffers/docs/javatutorial.html

What does it mean when it says to wrap the created class?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-17T22:06:14+00:00Added an answer on May 17, 2026 at 10:06 pm

    Perspective 1

    You write a .proto file and give it to protoc that generates the Builder code. They are suggesting not to add any methods to the generated code. If at all you want some custom behavior to be added to the generated code then WRITE YOUR OWN CLASS WRAPPING the generated code.

    For e.g let us say the protoc generated class is MyMessageBuilder. And you wanted to add a method that can take XML input and spitout the protobuff specific message out. You would write a XmlToMyMessageBuilder as below. Here XmlToMyMessageBuilder, your class is wrapping the generated code and adding custom behavior fromXml().

    public class XmlToMyMessageBuilder
    {
        private final MyMessageBuilder protoBuilder;
    
        public MyMessage fromXml(byte[] input()
        {
            protoBuilder.setXXX();
        }
    }
    

    This is a general good programming principle.

    Perspective 2

    By providing a intermediary you can also DECOUPLE your code from the underlying serialization mechanism. This allows you to switch the serializer implementations (say you want to serialize a payload where all the data is in string format…where JSON seriazation with compression is a better alternative) with low impact. You could do something like this

    public interface MySerializer
    {
        boolean serialize(MyDomainObject input);
    }
    
    public PBBasedSerializer implements MySerializer
    {
        private final MyMessageBuilder protoBuilder;
        ...
    }
    
    public JsonBasedSerializer implements MySerializer
    {
        private final JSONSerializer jsonSerializer;
        ...
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I want to use the Web Browser control within an mono application, but when
I want to use the Publish.GacRemove function to remove an assembly from GAC. However,
I want to use the MultipleLookupField control in a web page that will run
I want to use CSS sprites on a web site instead of separate image
Below is my stored procedure. I want use stored procedure select all row of
I want to use the mouse scrollwheel in my OpenGL GLUT program to zoom
I want to use Powershell to write some utilities, leveraging our own .NET components
I want to use the functions exposed under the OpenGL extensions. I'm on Windows,
I want to use CodeDOM to both declare and initialize my static field in
I want to use SQL Profiler to trace the queries executed agains my database,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.