Jump to content

[Java][Opinion] Making static classes.


Ernio

Recommended Posts

I am not a professional coder, never studied it (just learned), it's more of a hobby.

 

Question is: In order to make namings "nice" - is it worth to make static classes, e.g:

 

public class ItemCore extends Item
{
public ItemCore(String name)
{
	super();
	//whatever (cut)
}

public static class ItemDust extends ItemCore
{
	public ItemDust(String name);
	{
		super("dust_" + name);
	}
}

public static class ItemOil extends ItemCore
{
	public ItemOil(String name)
	{
		super("oil_" + name);
	}
}
}

 

Meaning - is there a VALID (good practice or bad?) point in making it, or is it pointless?

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

Isn't one issue with nested classes that you need an instance of the outer class to create an instance of the inner class. So using it for items like in Ernio's example, you'd have to make an ItemCore instance that is just for purpose of allowing inner classes to be instantiated, even though the itemCore instance is never otherwise used/registered as an item in Forge.

 

Seems a little convoluted just for naming convenience, especially since you have a good, cleaner alternative: I think it makes more sense for naming to have the standard Items class where you have nicely named instances of the items as member fields (not classes).

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

Isn't one issue with nested classes that you need an instance of the outer class to create an instance of the inner class. So using it for items like in Ernio's example, you'd have to make an ItemCore instance that is just for purpose of allowing inner classes to be instantiated, even though the itemCore instance is never otherwise used/registered as an item in Forge.

 

Seems a little convoluted just for naming convenience, especially since you have a good, cleaner alternative: I think it makes more sense for naming to have the standard Items class where you have nicely named instances of the items as member fields (not classes).

As i know and if you haven't said it: static nested classes do not require instance of parent class (can be instanated by new ParentClass.NestedClass()), but non static do (only new parentClassIntsance.NestedClass() will work)...

Link to comment
Share on other sites

Hi

I have found myself using a static class only when I am creating subclasses in the super class for the purpose of quickness \ less classes with very little code (I have done this in the item initialization and registry class and created subclasses there). In the item registry class, the methods should be declared "static". If the case is that your subclass references a static variable or method from the super class, the subclass must be static or eclipse will throw errors. Sounds confusing until you try it!

Development of Plugins [2012 - 2014] Development of Mods [2012 - Current]

Link to comment
Share on other sites

elix is right with that. if u think a bit about what static means in java ull know

 

Yeah, the terminology for "nested" versus "inner" confuses me sometimes. I wish they just called them static nested and non-static nested. Instead non-static nested is called inner. I realize the terminology makes sense in terms of access of the outside class members, but still seems a bit inconsistent.

 

I was remembering (rightly) that all inner classes require an instance, but inner class is basically "non-static nested" class. There is no such thing as "static inner".

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

Ernio, I think in your example it would be better to just pass ('prefix_' + name) to your constructor as necessary with one single class, especially if you will only have one instance of each subclass.

 

Also, if you are planning on only using a class once, you may want to consider anonymous classes. I often use them if, for example, I have a 'special case' within my class that could instead be handled by overriding a single (or sometimes two) method as an anonymous class, most often with Items.

 

So instead of:

public void someMethod() {
  if (this == MyItems.specialItem) {
     // do something special
  } else {
     // do something mundane
  }
}

 

I end up with:

// original class:
public void someMethod() {
  // do something mundane
}

// when instantiating my SpecialItem:
specialItem = (new SomeItem() {
  @Override
  public void someMethod() {
     // do something special
  }
});
// note: you don't technically need to surround your anonymous class declaration in parentheses, but you will need to
// if you are going to chain any methods off of it, e.g. setUnlocalizedName, setCreativeTabs, or anything like that

 

This summary, while a bit too concise, still sort of explains typical use cases for nested, inner, and anonymous classes, among other things.

Link to comment
Share on other sites

  • 7 months later...

The reasons you would like to use nested static classes are explained here:

http://stackoverflow.com/a/253521

I still haven't published a mod because I can never get that in-dev version just right to warrant a public release. And yes, after two years of mod development I am still learning to speak Java.

 

Follow me on GitHub: https://github.com/yooksi

Contact me on Twitter: https://twitter.com/yooksi

Read my Minecraft blog: https://yooksidoesminecraft.blogspot.de/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.