Declaring method arguments as 'final'.
Hi all
Is it a good practice to declare method arguments as 'final' in java. Also please let me know how the performance would be effected.
Ex: private int xMethod(final int i){}
Thanks in advance.
You are likely to find performance to be comparable whether you declare your argument as final or not.
All it means is you cannot change the reference for an object argument or the value of a primitive argument in the method for which it is an argument.
Note that you can still change the state of an object argument declared final! Final is not the same as const, which Java does not support.
Similar Messages
-
Is it possible to declare method with non-finite argument list ?
Hi, everyone,
Is it possible to declare method with non-finite argument list
and to read values of these arguments inside this method ?
I'm not talking about main() method (i know it can), but
values to this method are passed through array. That won't do
do for me.
If it is possible, could someone show an example how to do this.void method(Object[]o)
for (int i=0; i<o.length; i++)
if (oinstanceof Integer)
System.out.println("is is an integer: "+o[i]);
else if (o[i]instanceof Point)
System.out.println("is is an Point: "+((Point)o[i]).x+"/"+((Point)o[i]).y);
else if (o[i]instanceof String)
System.out.println("is is an String: "+o[i]);
if you call it like
method(new Object[]{new Integer(123), "Hello!", new Point(100, 200), "goodbye!"});then the method will output:
is is an integer: 123
is is an String: Hello!
is is an Point: 100/200
is is an String: Goodbye!
this is as powerful as varible parameter counts like in c, and it it typesafe. -
How do I redefine a Method of a Final Class?
Hi,
Is it possible to redefine a method of a final class and if so, can someone please give me a brief example of that technique?
Thank you very much!
AndyHi,
Please find the example.
Program Description : Interface I1 contains two methods : M1 and M2.
I1 is included and incorporated in class : C1 with M2 as a final method. Both the methods are implemented in class C1.
Class C2 is a subclass of class C1. It redefines method : I1M1 and re-implements it, but it does not do that for I1M2 as that is declared as final method.
In the START-OF-SELECTION block, object OREF1 is created from class C1 and OREF2 from class C2 and both the methods M1 and M2 are called using both the objects.
Example:
report ytest .
interface i1 .
methods : m1 ,
m2 .
endinterface.
class c1 definition.
public section.
interfaces : I1 final methods m2 .
endclass.
class c1 implementation.
method i1~m1.
write:/5 'I am m1 in c1'.
endmethod.
method i1~m2.
write:/5 'I am m2 in c1'.
endmethod.
endclass.
class c2 definition inheriting from c1.
public section.
methods : i1~m1 redefinition .
endclass.
class c2 implementation.
method : i1~m1.
write:/5 'I am m1 in c2'.
endmethod.
endclass.
start-of-selection.
data : oref1 type ref to c1,
oref2 type ref to c2 .
create object : oref1 , oref2.
call method : oref1->i1~m1 , u201C Output : I am m1 in c1
oref2->i1~m1 , u201C Output : I am m1 in c2
oref1->i1~m2 , u201C Output : I am m2 in c1
oref2->i1~m2 . u201C Output : I am m2 in c1
Output : I am m1 in c1
I am m1 in c2
I am m2 in c1
I am m2 in c1
Thanks,
Anitha -
Find out method argument values at run time
Hi,
I am looking to find out the argument names and values of a method at run time. (This would allow for instance to automatically log argument names and values without writing tedious code).
The following thread did not seem to answer this problem
http://forum.java.sun.com/thread.jspa?forumID=4&threadID=411455
Any suggestions welcomed
BenAs there is no Method-Object representing the current method call, I doubt you will get hands on the arguments passed to the method other than referencing them or building a framework "on top" (as, e.g., AspectJ). Also, Method in reflections does not hold the names of parameters, so it will be difficult to automatically print information on more than the signature.
The following is a not very robust, little play-around code for logging. Maybe it delivers enough information for some situations:
public class Test {
void test(String arg0, int arg1) {
log(new MethodGetter(){}.get(), arg0, arg1);
public static void main(String[] args) {
new Test().test("zero", 1);
public static final void log(Method method, Object ... args) {
final StringBuilder builder = new StringBuilder();
builder.append(method.getDeclaringClass().getSimpleName()).append('.');
builder.append(method.getName()).append('(');
final Class<?>[] parameterTypes = method.getParameterTypes();
for (int index = 0; index < parameterTypes.length; index++) {
if (index > 0) {
builder.append(", ");
builder.append('(').append(parameterTypes[index].getSimpleName()).append(") ");
if (index < args.length) {
builder.append(args[index]);
} else {
builder.append("null");
builder.append(");");
System.out.println(builder.toString());
public static abstract class MethodGetter {
public Method get() {
return getClass().getEnclosingMethod();
}It will print the following:
Test.test((String) zero, (int) 1);
Note that MethodGetter and log and main are enclosed for test purpose only. -
Why would you declare a parameter as final ?
"It is good practice to specify parameters that are class objects as final if you do not intend to alter them in a method."
- Ivor Horton, Begining Java 2 .
Why ?
Declaring an object parameter as final or not still allows you to change the properties (instance variables) of the object. Rather, declaring the parameter as final only ensures that the reference to the object cannot be changed.
Have i got this right ?
Any help will be appreciated.
EzazI often define my collections as final
class Whatever {
final ArrayList arList = new ArrayList();
}Then you never have to test arList for null because any attempt to reset arList is flagged as a compiler error - e.g.
arList = null; // Compiler error
arList = new ArrayList(); // Compiler errorThe compiler and/or JVM can also do any optimzations knowing this as well. -
Declaration method in users Class
What's different between declaration method in these codes
class Programm
ClassA class1 = new ClassA();
class1.TestMethod();
public ClassA
public void TestMethod()
and
class Programm
ClassA.TestMethod();
public ClassA
internal static void TestMethod()There are 2 main differences.
Your access modifier is different (public / internal). See this link for information about the 4 different access modifier. https://msdn.microsoft.com/en-us/library/ms173121.aspx
Your first method has instance scope and the second one has a static/global scope. See this link on what the difference is between the 2. https://msdn.microsoft.com/en-us/library/aa645629(v=vs.71).aspx
-Igor -
Interfaces declare methods that one or more classes may or may not implemen
Interfaces declare methods that one or more classes may or may not implement.
true or false?Encephalopathic wrote:
If you want to appear to be more than just someone scrounging for someone else to do their homeworkHe/she is what they is
[http://forum.java.sun.com/thread.jspa?threadID=5292343]
[http://forum.java.sun.com/thread.jspa?threadID=5283461]
[http://forum.java.sun.com/thread.jspa?threadID=5283412]
[http://forum.java.sun.com/thread.jspa?threadID=5279385] -
Can I make method arguments read only?? I want to send an object to a method and make it read only. i dont want a method to change public varables of the mthod argument object.
Can anyone help me on this??
Thanks,
VaijayantiNot possible, but you can pass a copy of the object, so that even if it's changed the changes aren't reflected to the original object.
-
Getting method arguments as hasmap
Hi,
can I get a method arguments in hashtable ? for example
public void methodA(integer arg1,string arg2, integer arg3)
so,
is there any method in java that return a hashtable contains all method arguments , while running methodA.
hashTable would be like this :
arg1 1
arg2 'a'
arg3 5Bender_R. wrote:
If you really need it, you can do it using Spring AOP. See AOP
Edited by: Bender_R. on Oct 29, 2009 11:47 AMWhich won't give parameter names. And is unnecessary anyway, since you could just use a dynamic proxy without having to have all the Spring dependencies present -
Revision: 7825
Author: [email protected]
Date: 2009-06-13 14:17:47 -0700 (Sat, 13 Jun 2009)
Log Message:
Updating sample Java formatter for Eclipse projects to stop reformatting method arguments.
QA: No
Doc: No
Modified Paths:
flex/sdk/trunk/development/eclipse/java/formatter.xmlIf you're still using Buckminster 3.6, I strongly suggest switching to 3.7 - it has a number of bug fixes and improvements. This applies to both headless, and the IDE (assuming Eclipse 3.7 Indigo).
Matthew -
Final class: methods/fields automatically final?
As a final class cannot be subclassed, methods/fields cannot be overwritten. But is there a performance/security difference between
public final class A {
public static final String S = "S";
public final static do() {}
}and
public final class A {
public static String S = "S";
public static do() {}
}?As a final class cannot be subclassed, methods/fields
cannot be overwritten. But is there a
performance/security difference betweenAll methods of a final class are implicitly final.
Fields are not (you could demonstrate that very easily by altering the value of the field S in your example). -
Creating arrays in method argument
this words fine
int[] f = {1,2,3,4};but when i try make it into one line, for example for usage as arguments to a method, it does not compile
class test {
public static void a(int[] in) {};
public static void main (String[] args) {
a( (int[]) {1,2,3,4 } );
};i know i could just declare the array before hand, but it in my case it involves calling a super constructor, which must be the first line in the function.
help would be appreicatedHi,
a(new int[] { 1,2,3,4,});
/Kaj -
Static Methods with all Final Parameters
Gurus,
I know the synchronization and static method question has been hashed out ad infinitum here. However, I was thinking of a slight twist. (Did a search but could not find something related to this. If this has already been posted, my apologies).
Suppose you have a static method in which all of the parameters in the method signature are declared final. Let's assume also that you are not performing an operation with a high latency (say, database or network operations).
Would it be "safe" to leave the static method unsynchronized in a multi-threaded environment? Would the final keyword(s) ensure that, throughout method execution, there is no longer a race condition?
Would there be a difference between a primitive:
static final public void doSomething(final int param) {}
And an object that has mutator methods:
static final public void doSomething(final List param) {}
Basically, not having a formal CS background, I'm not sure how static methods are actually invoked on a low-level. It probably varies across JVM's, and maybe this question doesn't make much sense. However, I thought I would throw this out to see if anyone had implemented something similar.
I might be giving "final" too much credit., but what would actually happen in a multi-threaded environment?
Thanks much!
- Saish
"My karma ran over your dogma." - AnonI know the synchronization and static method question
has been hashed out ad infinitum here. What question's that then?
Suppose you have a static method in which all of the
parameters in the method signature are declared final.
Let's assume also that you are not performing an
operation with a high latency (say, database or
network operations).
Would it be "safe" to leave the static method
unsynchronized in a multi-threaded environment?Whether or not the parameters are final makes no difference - method parameters are local to the method and so are only visible to the current thread anyway. So making them final will have no effect on anything goning on in any other thread.
Whether or not you are performing operations has no effect on whether or not you can call a method thread-safe. It might mean there is less contention and it might make race conditions less likely, but it won't eliminate them.
So the answer is: If your would be thread safe with non-final parameters, then it will still be thread-safe when the parameters are all final. If it is not thread-safe with non-final parameters, then it will still not be thread safe with final parameters.
Would the final keyword(s) ensure that, throughout
t method execution, there is no longer a race
condition?No. Absoloutely not. -
Is there anyway to pass an Array as argument without declare an array variable before?
Example:
public class MyClass
public MyClass
myMethod( HOW CAN I PASS AN ARRAY HERE !);
public void myMethod(String[] myArray)
// The method body ;Is there anyway to pass an Array as argument without declare an array variable before?what's the point of passing the array then?
when you passs the array..you want to send some information and get someinformation back
by not decalring the variable before passing in the array..it's just makes no sense
mind as well rewrite the method to taks no argument
but here..you do it like this
myMethod(new String[]) // not initialized array of String
myMethod(null); // send in a null object -
ADFBC Where to define labels for custom Application Module method arguments
I was wondering if there was a "good place" to define these labels in ADF Business Components. I can just change them for the UI for my current project, but I thinking there might be a better way.
Thanks,
BrianHi,
I think you can't in BC, but you can in ADF. If you drag a method onto the client then it creates a method binding with argument itemes below. In addition, look in the executable section, it creates variables for each. This is where you can define labels so that they can be translated
Frank
Maybe you are looking for
-
Hi All, I have requirement when in I need to store single value fields, multi-value fields and also standard BP fields (like Address, telecom) within a BP Relationship. Requirement: A student and university are two business partners. Student and univ
-
Dear Friends, When i am creating specail G/L indicator "W" the system is giving the follwoinng error "Message no. F4783 The special G/L transaction types correspond with the special G/L indicator. The following types have a specific hard-programmed m
-
Dymanic mic in 1/4" line2 input not workking?
I'm using? a Audigy 2ZS Platinum which came with Cubasis VST 4.0, FL Studio 4, and Wavelab lite. My system is a Opteron 2.0? with 2 gig ram and windows xp. I'm trying to record from a dymanic mic plugged into the front panel /4" line2 and I can't fig
-
Hi everyone, I updated my MAC G4 to Tiger OS and have some problems with my Final Cut software. Since this update, FC cannot recognize my Sony GV-D1000 recorder. Someone advised me to delete my profile. First, I am not sure if this will resolve my pr
-
Work flow & SRM configuration step by step guide
Hello All.... Please send me the Work flow DOcumnetation related to SRM/EBP Thanks in Advance and points rewarded. Arshad