Getting the name of a calling Class
Hi,
Is there anyway I can get the name of the Class that calls a Class in the Class that is being called?
Cheers
SS
write this into your called class
this.getClass().getDeclaringClass()
Similar Messages
-
How to get the name of the class which is currently in use
Hi all,
I have two classes Mother and Child, and I use this code to print the name of the class in use
DATA m TYPE REF TO zmother.
DATA class_name type string VALUE 'CHILD'.
CREATE OBJECT m TYPE (class_name).
CALL METHOD m->PrintName .
So, what is the source code that I have to put in the PrintName methode?
Thanks.Ok, but how can I get the name of the object class that calls the methode!
REPORT ztest_method.
* CLASS c1 DEFINITION
CLASS c1 DEFINITION.
PUBLIC SECTION.
METHODS: get_data.
ENDCLASS. "c1 DEFINITION
* CLASS c1 IMPLEMENTATION
CLASS c1 IMPLEMENTATION.
METHOD get_data.
****** What is the code to put here to know the name of this Class?*
ENDMETHOD. "get_data
ENDCLASS. "c1 IMPLEMENTATION
DATA oref TYPE REF TO object.
DATA: method TYPE string.
DATA: cla_name(20).
START-OF-SELECTION.
cla_name = 'C1'.
CREATE OBJECT oref TYPE (cla_name).
BREAK-POINT.
CALL METHOD oref->(method). -
Get the name and path of the calling JSP
Hi all,
I have a code structure like this
class MyBaseServlet extends HttpServlet{
doPost(){processRequest();}
doGet(){processRequest();}
processRequest(req, resp){}
myPrivateMethod(req,resp){
//I want the name of the JSP which invoked the servlet that extends this(MyBaseServlet) here
class MySerlvet extends MyBaseServlet{
processRequest(req, resp){}
I have a JSP which submits in the <FORM> action calls MyServlet. Since MyServlet extends MyBaseServlet, and this has the doPost() and doGet() methods, the control goes here first, and then since MyServlet has overridden the processRequest() method , the control comes here.
My query isthat, while in MyBaseServlet (either in doPost() or doGet(), say I call myPrivateMethod(), is there any way here, inside myPrivateMethod() to get the name of the JSP which called MyServlet.
Note:
The constraint here is that we are not in a position to include any code into either the JSP or MyServlet. I'm running this in a J2EE environment on Websphere.
Thanks in advance.You can use the methods of the HTTPServletRequest class to get the URI/URL info...for example request.getRequestURI() /URL()/ServletPathInfo()
http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/http/HttpServletRequest.html -
Cisco Unity 7: Voice mail cann't get the name or Number phone of the caller
Hi,
I have installed Cisco Unity Messaging Unified version 7 and integrated with Exchange 2010.
I have two scenario, and I want to know if are normal or not:
1. If the 2 IP phones are subscribed with Cisco Unity: the first IP phone call the other IP phone and let a voice mail. When the second IP phone check his message vocal it can get the name of the caller or his number phone (the message is: You have One message from XXXX) and he get e-mail as objet: Voice Mail from XXXX.
2. If one IP phone is not subscriber with cisco unity call other Ip phone subscribed with cisco unity and let him a voice mail. The second IP phone when check his message vocal it can’t get the name of the caller or his number phone: The message is: You have one voice mail xxxx; without indicate from!! and he get a e-mail as object: Voice mail from Unknown.
Please, I want to know if the second scenario is normal ? if not, who to resolve this problem? I want that he indicate the number of caller same he isn't subscriber with cisco unity?
Thanks a lot,
Best regards,
Omar YUNSISo for the 2nd scenerio you would want to check what your Message Subjects were set to. For Unity 7 open Web SA, click Configuration and then Message Subjects. Make sure that the Outside Caller Message has %CALLERID% in it somewhere. The value %CALLERNAME% will return unknown if we do not receive a name from the PSTN.
Try setting the Outside Caller Message to:
%U% %P% Voice Message from %CALLERID%
and that should get you your desired results.
The default Message subject is:
%U% %P% Voice Message from %CALLERNAME% (%CALLERID%). So with that it would say Voice Message fom Unknown (xxxx) if it was not able to determine the name of the user which is usually normal from a PSTN call.
Just to note, the From address is always going to say from Unity Messaging System, it will only be the subject that has the extension in it.
Bryan -
How to get the name of a class invoking
Can a method get the name of the class invoking it?
As:
public void myMethod(){
System.out.println("the name of the class invoking this method is: " + XXXXX);
}Edited by: Maria1990 on Aug 17, 2010 8:46 AMMaria1990 wrote:
.getStackTrace() gives me an array with the all details.Or, if you only care about the class, ask a SecurityManager.
public final class ClassUtils {
public static final Class[] getClassContext() {
return new SecurityManager() {
protected Class[] getClassContext(){return super.getClassContext();}
}.getClassContext();
private ClassUtils() {};
public static final Class getCallingClass() { return getClassContext()[2];}
} -
Getting the name of the program or the FM called from security audit log
Dears,
Is there a way to get the name of the ABAP program called through transaction SE38, or the FM called through transaction SE37, from the security audit log ?
What is available is only : RSABAPPROGRAM for transaction SE38, and RSFUNCTIONBUILDER for transaction SE37
Thanks.
RedaI had always assumed this log to be in the SUBMIT statement, but never used it.
If I remember correctly this is recorded it the runtime submit, so it should be there.
Perhaps it is only in selected reports? I will check in my system.
Please compare with sm20n and run the report from sa38. The submits are different in sa38 etc compared to se38.
The FM will only be recorded it it has a destination extention in the source system which is mostly remote. Local fm calls are not recorded for sure.
Cheers,
Julius
Edited by: Julius Bussche on Jul 26, 2011 11:32 PM -
Getting the name of outer class in an inner class
Hi,
I have a private inner class, something like this:
public class OuterClass extends AnotherClass {
public OuterClass() {
supre();
private class innerClass1 extends SomeotherClass {
protected void someMethod() {
// how to get the name of outer class, that is, "OuterClass"
Can someone please tell me how to get the name of the outer class inside the inner class method?
Thanks in advance..
PrasannagetClass().getEnclosingClass().getName()But then, you already know it, don't you?
-
Getting the names of all classes
Hi,
I want to write a Java editor with code completion. Is there a way to get all the class names available in the installed Java run time environment.
Does the reflection API provides a way to do it.
Thanks a lot,
Chamal.You can also look at JPDA (should be documented as part of your JDK under 'Tool Support' of the documents index), and the JDI api VirtualMachine.allClasses() method.
That will return the name of all loaded classes, which will not be the same as all classes on the path, as it includes any dynamically created classes, and excludes any classes on the path not loaded.
Pete -
Getting the JAXB exception like "Two classes have the same XML type name-"
Getting the JAXB exception like "Two classes have the same XML type name...",
Here is the exception details:
Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions Two classes have the same XML type name "city". Use @XmlType.name and @XmlType.namespace to assign different names to them. this problem is related to the following location: at com.model.City at public com.model.City com.model.Address.getCurrentCity() at com.model.Address this problem is related to the following location: at com.common.City at public com.common.City com.model.Address.getPreviousCity() at com.model.Address
at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source) at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source) at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at javax.xml.bind.ContextFinder.newInstance(Unknown Source) at javax.xml.bind.ContextFinder.find(Unknown Source) at javax.xml.bind.JAXBContext.newInstance(Unknown Source) at javax.xml.bind.JAXBContext.newInstance(Unknown Source) at com.PojoToXSD.main(PojoToXSD.java:17)
I took the example like:
package com.model; ---->this package contains 'Address' class and 'City' class
public class Address {
private String areaName; private City currentCity; private com.common.City previousCity;
package com.model;
public class City {
private String cityName;
Another city class in "com.common" package.
package com.common;
public class City {
private String pinCode;
We need to create XSDs and needs to do the Marshalling and unmarshalling with the existing code in our project(like as above example code), code does not have any annotations like "@XmlRootElement/@XmlType" and we can not able to change the source code.
I would like to know is there any solution to fix the above issue or any other ways to create XSDs and marshaling/unmarshalling(like MOXy..etc)?
It would be great if i can get the solution from any one....May thanks in advance.
Thanks,
Satya.Getting the JAXB exception like "Two classes have the same XML type name...",
Here is the exception details:
Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions Two classes have the same XML type name "city". Use @XmlType.name and @XmlType.namespace to assign different names to them. this problem is related to the following location: at com.model.City at public com.model.City com.model.Address.getCurrentCity() at com.model.Address this problem is related to the following location: at com.common.City at public com.common.City com.model.Address.getPreviousCity() at com.model.Address
at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(Unknown Source) at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source) at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source) at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at javax.xml.bind.ContextFinder.newInstance(Unknown Source) at javax.xml.bind.ContextFinder.find(Unknown Source) at javax.xml.bind.JAXBContext.newInstance(Unknown Source) at javax.xml.bind.JAXBContext.newInstance(Unknown Source) at com.PojoToXSD.main(PojoToXSD.java:17)
I took the example like:
package com.model; ---->this package contains 'Address' class and 'City' class
public class Address {
private String areaName; private City currentCity; private com.common.City previousCity;
package com.model;
public class City {
private String cityName;
Another city class in "com.common" package.
package com.common;
public class City {
private String pinCode;
We need to create XSDs and needs to do the Marshalling and unmarshalling with the existing code in our project(like as above example code), code does not have any annotations like "@XmlRootElement/@XmlType" and we can not able to change the source code.
I would like to know is there any solution to fix the above issue or any other ways to create XSDs and marshaling/unmarshalling(like MOXy..etc)?
It would be great if i can get the solution from any one....May thanks in advance.
Thanks,
Satya. -
Getting the name of a menu from the menu item
Hi everybody,
I'm trying to get the name of the menu that a particular menu item is classified under, and thus far I can't figure out how. Can anyone give me a hand with this, please? I have a SSCCE that describes my efforts so far:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
public class MenuTester {
public MenuTester() {
JMenuItem item = new JMenuItem( "zzz" );
item.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
System.out.println( ((JPopupMenu)((JMenuItem)e.getSource()).getParent()).getLabel() );
System.out.println( ((JPopupMenu)((JMenuItem)e.getSource()).getParent()).getName() );
JMenu menu = new JMenu( "test" );
menu.setName( "test" );
menu.add( item );
JMenuBar bar = new JMenuBar();
bar.add( menu );
JFrame frame = new JFrame();
frame.setJMenuBar( bar );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setSize( 300, 300 );
frame.setVisible( true );
public static void main( String args[] ) { new MenuTester(); }
}I've tried the JPopupMenu method getLabel, and the generic Component method getName, but neither of them seem to work, even when I explicitly set the name. The result of both calls is "null", not "test" as it should be. There must be something small that I'm missing, but I'm not sure what, can anyone please tell me what it is?
Thanks,
Jezzica85JMenuItem mi = (JMenuItem)e.getSource();
JPopupMenu popup = (JPopupMenu)mi.getParent();
JMenu menu = (JMenu)popup.getInvoker();
System.out.println( menu.getText() ); -
Not able to get group name by using memberof class, getting Total groups as 0 even I am member of that group. Through this memberof class I am trying to find full qualified name(DN) of my group.
code I have used:
//specify the LDAP search filter
String searchFilter = "(&(objectClass=user)(CN=Username))";
//Specify the Base for the search
String searchBase = "";
Also I have used,
String searchFilter = "(&(objectClass=user)(CN=Username))";
//Specify the Base for the search
String searchBase = "ou=ibmgroups,o=ibm.com";
But in both cases I am getting value for Total groups as 0.
Code Reference:
* memberof.java
* December 2004
* Sample JNDI application to determine what groups a user belongs to
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
public class memberof {
public static void main (String[] args) {
Hashtable env = new Hashtable();
String adminName = "CN=Administrator,CN=Users,DC=ANTIPODES,DC=COM";
String adminPassword = "XXXXXXX";
String ldapURL = "ldap://mydc.antipodes.com:389";
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,adminName);
env.put(Context.SECURITY_CREDENTIALS,adminPassword);
//connect to my domain controller
env.put(Context.PROVIDER_URL,ldapURL);
try {
//Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
//Create the search controls
SearchControls searchCtls = new SearchControls();
//Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//specify the LDAP search filter
String searchFilter = "(&(objectClass=user)(CN=Andrew Anderson))";
//Specify the Base for the search
String searchBase = "DC=antipodes,DC=com";
//initialize counter to total the group members
int totalResults = 0;
//Specify the attributes to return
String returnedAtts[]={"memberOf"};
searchCtls.setReturningAttributes(returnedAtts);
//Search for objects using the filter
NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls);
//Loop through the search results
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult)answer.next();
System.out.println(">>>" + sr.getName());
//Print out the groups
Attributes attrs = sr.getAttributes();
if (attrs != null) {
try {
for (NamingEnumeration ae = attrs.getAll();ae.hasMore();) {
Attribute attr = (Attribute)ae.next();
System.out.println("Attribute: " + attr.getID());
for (NamingEnumeration e = attr.getAll();e.hasMore();totalResults++) {
System.out.println(" " + totalResults + ". " + e.next());
catch (NamingException e) {
System.err.println("Problem listing membership: " + e);
System.out.println("Total groups: " + totalResults);
ctx.close();
catch (NamingException e) {
System.err.println("Problem searching directory: " + e);
Any help will be highly appreciated.Not able to get group name by using memberof class, getting Total groups as 0 even I am member of that group. Through this memberof class I am trying to find full qualified name(DN) of my group.
code I have used:
//specify the LDAP search filter
String searchFilter = "(&(objectClass=user)(CN=Username))";
//Specify the Base for the search
String searchBase = "";
Also I have used,
String searchFilter = "(&(objectClass=user)(CN=Username))";
//Specify the Base for the search
String searchBase = "ou=ibmgroups,o=ibm.com";
But in both cases I am getting value for Total groups as 0.
Code Reference:
* memberof.java
* December 2004
* Sample JNDI application to determine what groups a user belongs to
import java.util.Hashtable;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.naming.directory.*;
public class memberof {
public static void main (String[] args) {
Hashtable env = new Hashtable();
String adminName = "CN=Administrator,CN=Users,DC=ANTIPODES,DC=COM";
String adminPassword = "XXXXXXX";
String ldapURL = "ldap://mydc.antipodes.com:389";
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,adminName);
env.put(Context.SECURITY_CREDENTIALS,adminPassword);
//connect to my domain controller
env.put(Context.PROVIDER_URL,ldapURL);
try {
//Create the initial directory context
LdapContext ctx = new InitialLdapContext(env,null);
//Create the search controls
SearchControls searchCtls = new SearchControls();
//Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//specify the LDAP search filter
String searchFilter = "(&(objectClass=user)(CN=Andrew Anderson))";
//Specify the Base for the search
String searchBase = "DC=antipodes,DC=com";
//initialize counter to total the group members
int totalResults = 0;
//Specify the attributes to return
String returnedAtts[]={"memberOf"};
searchCtls.setReturningAttributes(returnedAtts);
//Search for objects using the filter
NamingEnumeration answer = ctx.search(searchBase, searchFilter, searchCtls);
//Loop through the search results
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult)answer.next();
System.out.println(">>>" + sr.getName());
//Print out the groups
Attributes attrs = sr.getAttributes();
if (attrs != null) {
try {
for (NamingEnumeration ae = attrs.getAll();ae.hasMore();) {
Attribute attr = (Attribute)ae.next();
System.out.println("Attribute: " + attr.getID());
for (NamingEnumeration e = attr.getAll();e.hasMore();totalResults++) {
System.out.println(" " + totalResults + ". " + e.next());
catch (NamingException e) {
System.err.println("Problem listing membership: " + e);
System.out.println("Total groups: " + totalResults);
ctx.close();
catch (NamingException e) {
System.err.println("Problem searching directory: " + e);
Any help will be highly appreciated. -
Unable to get the Text proerty of Range class
Hi,
I am using the Text property of Range class for excel template development using VSTO.While reloading the template i am getting the error "Unable to get the Text proerty of Range class".If i skip this line of code,i am getting similar kind of errors while accessing the properties of Range class(like Range.copy() ,Range.Locked, Range.EntireRow.Hidden).In all these cases i am getting the similar kind of error "unable to get the property of Range Class".
Waiting for a quick response...
Thanks in advance..Hi Besse,
Actully, the error is coming when i try to populate datatable with the the range values in one of the sheet.
I am using the below code.
//"wsInteropMetadata" is the sheet object.
//"RangeName" is the range name in the sheet.
rngConfig = wsInteropMetadata.get_Range("RangeName", Type.Missing);
for (int iRow = 1; iRow <= iRowCnt; iRow++)
dRNew = dTMetadataTable.NewRow();
for (int iCol = 1; iCol <= iColCnt; iCol++)
rngCell = (Excel.Range)rngConfig.Cells[iRow, iCol];
dRNew[iCol - 1] = rngCell.Text.ToString();
dTMetadataTable.Rows.Add(dRNew);
In the first load of the template,this code is working fine.In the reload i am getting the error at "rngCell.Text".If i see in quickwatch,most of the properties of "rngCell" object are throwing "System.Runtime.InteropServices.COMException".See the below exception information.
Exception Information
Exception Type: System.Runtime.InteropServices.COMException
Message: Unable to get the Text property of the Range class
Source: Microsoft Office Excel
ErrorCode: -2146827284
Thanks
Krishna. -
How to get the name of current monitor?
I have a script which is used to get some application data. The script take parameters such as "LOB" so it can query data for different department. When it found something, it raise an event in event log.
Therefore this script is used by several different monitors. Each monitor calls the script by passing different parameters. To better understand the event was created by which monitor, I want the script can get the name of monitor which calling it and they
list it in the event log too.
Currently, I am passing $MPElement$ as one script parameter so I can get the monitor's GUID. Then get the name by running powershell command. Is there an easier way to get the monitor name? Thanks!The best way to do this is to put the monitor name as a property bag in the script and pass that to your event details. Otherwise, we're looking at querying the database each time the monitor generates an event, and this is overhead that is really not
necessary. The other option, which is just even worse in terms of performance, is to use powershell to query the SDK for the monitor name. Both of these options are not going to be a good solution, because now you need to implement action accounts that can
either query the database or the sdk.
Jonathan Almquist | SCOMskills, LLC (http://scomskills.com) -
How to get the name of a Data Element of a generic Table!
Hi guys!
In my function i have the following import paramenter
i_outtab type standard table
now i import a table and i want to get the dataelement of the fields.
is there a way to do this??Hello Thomas
Perhaps the following sample report may be useful for you.
*& Report ZUS_SDN_RTTI_STRUCT_COMPONENTS
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="1145711"></a>
*& Thread: How to get the name of a Data Element of a generic Table!
REPORT zus_sdn_rtti_struct_components.
TYPE-POOLS: abap.
TYPES: BEGIN OF ty_s_outtab.
TYPES: bukrs TYPE bukrs.
TYPES: kunnr TYPE kunnr.
TYPES: END OF ty_s_outtab.
DATA: gdo_data TYPE REF TO data.
DATA: gs_outtab TYPE ty_s_outtab.
DATA: go_typedescr TYPE REF TO cl_abap_typedescr,
go_structdescr TYPE REF TO cl_abap_structdescr,
go_datadescr type ref to cl_abap_datadescr.
DATA: gs_comp TYPE abap_compdescr,
gd_dtel type string,
gt_dfies type ddfields.
FIELD-SYMBOLS:
<gs_struct> TYPE ANY.
START-OF-SELECTION.
BREAK-POINT.
GET REFERENCE OF gs_outtab INTO gdo_data.
ASSIGN gdo_data->* TO <gs_struct>.
go_typedescr = cl_abap_typedescr=>describe_by_data( <gs_struct> ).
go_structdescr ?= go_typedescr.
BREAK-POINT.
LOOP AT go_structdescr->components INTO gs_comp.
go_datadescr = GO_STRUCTDESCR->GET_COMPONENT_TYPE( gs_comp-name ).
gd_dtel = go_datadescr->get_relative_name( ).
write: / syst-tabix, 'Data element =', gd_dtel.
ENDLOOP.
END-OF-SELECTION.
Regards
Uwe -
How to get the name of a field without specifying it as a string (somehow v
Is it possible to get the name of a field (or method) somehow via the class in which it is declared?
The reason why I ask is, that quite often the name of a field is important, because the name is the anchor for further processing, like for example when using reflection (e.g. Class.getfield(NameOfTheField)).
Assume you have class FooSimple with the field String firstName.
Now you would do something like this:
Class<FooSimple> cls = FooSimple.class;
Field f = cls.getField("firstName");
The problem is, that the string firstName is kind of hard coded. When the name of the field in class FooSimple changes (e.g. to theFirstName), the invocation will not work anymore when you forget to change the string too.
I think it would be very helpful to have access to the name of the field directly via the class by doing something like this.
Class<FooSimple> cls = FooSimple.class;
Field f = cls.getField(FooSimple.firstName.fieldName);
The Java Compiler would then resolve FooSimple.firstName.fieldName to the string firstName. When later the name of the field is changed, the IDE would change the name everywhere where it is used. So if the name of the field would be changed to theFirstName the IDE would also change the statement to
Class<FooSimple> cls = FooSimple.class;
Field f = cls.getField(FooSimple.theFirstName.fieldName);
A technique like this would be in my opinion much more safety and more generic.
Any ideas?
Best Regards.Well, I think the discussion is going in a wrong direction because the original issue was not to discuss if it is worth coding some helper classes or a framework or that like. Let me bring it back to my original point.
Basically you can reduce my original question to this:
Currently it is possible to use the reflection API on a class level without specifying the name of the class with a string constant.
My issue is, that I think it would be a nice extension for Java, if the same would be possible for field variables of a Java class. Currently the only way you can do this is by specifying the field variable with a string constant.
Let me bring some motivations which brought me to this issue.
Assume you have an entity bean which represents a DB table and you use Java Persistence (either JPA or something like Hibernate). Then you would have a class looking like this (very simple sample to make this reply shorter).
@Entity
@Table(name = "PERSON")
public class Person implements Serializable {
@Column(name = "NAME")
private String name;
// constructor, getter, setter, etc. not listed here
}The whole issue of the design of JPA is, that such entity beans represent the mapping between the object model and the DB model, the mapping is expressed with annotations.
Okay, now lets assume you write a query in Query Language, e.g.
String sql = select p from Person p where name = :name;name is the name of the field variable, :name is the parameter you later set with Query.setParameter method.
What is not so nice is the fact, that you use the name of the class and the name of the field variables hardcoded to construct the query. Now you could think that basically this information is part of your entity class. First you start with the name of the class (i.e. the table name) to decouple this hardcoding.
You could write instead:
String sql = select p from + Person.class.getSimpleName() + p where name = :name;This is really nice, because whenever you change the name of your Person class, this change happens automatically for the sql statement as well.
I think the next thoughts are obvious, now, since you have decoupled the hardcoded part of the name of the class, you would like to do the same for the names of the field variables. But now you are stuck, there is no way to do this using a similar technique like for the name of the class. Either you stay with the query as it is now, or, to make it a little bit better, you code string constants for the field variables and use them. This issue brought me to the point that I think it would be nice to have the possibility to get the name of a field variable in a similar way as you can get it for the name of the class.
Conceptually it is just to go one level deeper, i.e.
first level is to get the name of a class
second level is to get the name of the field variable of a class.
Another sample would be, if you want to code something by using reflection. You have perfectly access to the reflection API starting at the class level like Person.class.allTheNiceReflectionMethods. There is no need to specify the class first with a string constant first, you directly start with the class, you can even be generic and just work on the Class.class level and still have access to all these nice methods to get out the information you need.
But if you need to start with a very specific field variable (like in the sample above), you must go by using a string constant like Person.class.getDeclaredField(name).
So basically I think that there exist already millions of lines of Java code where a field variable is specified for further processing, especially in combination with the reflection functionality and everywhere the field variables are specified by these string constants in double quotes. I would assume, that everyone has the same problem, once changing the name of the field variable means to take care that also the content of the string which specifies the name of the field variable is changed.
I am wondering why one of the replies commented, why the name of a field variable is changed, it sounds to me that this is something which basically never happens. I dont know, I think that this happens actually quite often and thanks to all these nice IDEs and their rename feature this is usually no problem. From time to time names of classes change, name of field change, yes, they are often even completely rewritten, new field variables come in some are deleted, whatever it is. The way I currently can access the name of a class makes the code safer, because when I consequently go with Class.class.getSimpleName I always know, that when I rename the class all these statements are changed too If I delete such a class, I at least get a compile error.
My very simple issues is, that I think it would be nice to have the same comfort not only on a class level but also on the level of field variables, nothing more, nothing less.
To be honest, I have not browsed the forum yet if such an issue was already raised by other people (I will do this now), but somehow it is hard to imagine, that I am the first one.
Best regards.
Maybe you are looking for
-
Crystal Report prompts for username / pwd when deployed to Bus Obj Server
Hi All, I'm relatively new to Crystal Reports development. My day job is test analyst. I'm reasonably technically proficient. PROBLEM I have created a number of Crytsal Reports which have now been deployed to an Enterprise Business Objects Report S
-
How do I back up ipad to external hard drive?
I want to back up my IPad (without the cloud) to an external hard drive that also will back up my IMac using Time Machine. How can I do this? Thanks!!
-
POP UP window or screen to enter badge id ( it should work like Key board)
Hi , We have requirement that client have touchscreen user interface desktops in plant where production process goes on. I am developing a dynpro program for PP operations. This program will be used in touch screen devices. Before the operators sta
-
Why does Compressor's HDV output look worse than iDVD's output of same?
Okay, here's the thing... for weekly updates I've been sending the client outputs via iDVD. And they've honestly looked great. The HDV footage fills the screen and doesn't show any noticeable compression funkiness. But for the screening of the comple
-
Aperture Library to Adobe Lightroom?
Hello, Does anyone know of a way, or have any ideas, of how to share my Aperture library with Adobe Lightroom? I like both programs for different reasons and was curious if there was a way to at the very least export my Aperture Library in a way that