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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • How can I add drops when killing an entity? Now there are no drops. How can I add an @override to change the attack speed to 1.6 and show "when in main hand...attack damage,...attack speed"? also, how can I make the item enchantable? 
    • Ok. Thanks. by the way, will this crash in any circumstances? public boolean onLeftClickEntity(ItemStack stack, Player player, Entity entity) { if (entity instanceof LivingEntity){ LivingEntity victim = (LivingEntity) entity; if(!victim.isDeadOrDying() && victim.getHealth()>0){ victim.setHealth(0); return true; } } return false; }  
    • You shouldn't be extracting the mod .jar, just place it in your mods folder.
    • so basically another rundown of my probelm. Im the admin of a 1.20.1 modded server. Were using forge 47.2.0 but tested this issue in other forge versions too on sevrer and client side. so the forge version isnt the issue. The bug happens in following instances. Were using the attacks of the jujutsucraft mod by orca normally. And for everyone that stands there nothing changes. But everyone who wasnt in the chunks before or who relogins again those chunks will appear invisible for the most part. I tried fixing this be removing and adding following mods in many combinations. Embeddium, canary, memoryleakfix, ai improvements, Krypton reforges, better chunkloading, radium reforged, embeddium plus, farsight, betterchunkloading, oculus I tested most of these mods alone and in differents combinations with each other and without the mods. What i noticed is zhat when i removed  . most invisible chunks will return or semi return. and only ine or two chunks stay invisible. I rechanged those mids mostly on the cöient side but also some in the serveside. Ir most likely isnt an issue with another non performance mod since i noticed this thing with embeddium. Ans also the problem wasnt there im the beginning of the server. Granted since then we updated some of the mods that add content and their lib mod. But i went to every big mods discord and community that we have and i didnt find someone else havinf that chunk problem. Heres the link to a video of the Problem. https://streamable.com/9v1if2     heres the link to the modlist: https://ibb.co/myF8dtX     Pleaee im foghting for months with this problem. All the performance mods kn the modlist are for sure not the issue i tested without all of them.
    • It looks like you're only setting the health if the thing you are hitting is a player.  
  • Topics

×
×
  • Create New...

Important Information

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